Я пытаюсь скопировать файл в каталог с помощью фильтра awk на основе времени создания файла

#!/bin/bash
dir=/home/resaputra23/pyexample/python2/*
des=/home/resaputra23/pyexample/backup/
file1= stat $dir | awk {'print $2'} | grep 2014

for i in $file1
do
cp $i $des || echo "unable to copy $i"
done

Я получаю вывод

2014-12-02
2014-12-01
2014-12-28

Но нет копии файла в $ des

2 ответа2

0

попробуй это:

!/bin/bash
dir=/home/resaputra23/pyexample/python2/
des=/home/resaputra23/pyexample/backup/
#insert your prefered since date    
sincedate="2015-01-01"
find $dir -newermt "$sincedate" > files.txt
while read files; do
    cp $files $des
done < files.txt
rm -f files.txt
0

Я предлагаю использовать find . Следующая команда выберет и переместит все файлы.

find "$Dir" -newermt "1 Jen 2014" ! -newermt "1 Jen 2015" -exec cp {} $Dest \;

Еще несколько слов: в общем, есть много причин, по которым лучше не анализировать вывод ls, в основном из-за пробелов или специальных символов, которые в конечном итоге присутствуют в имени файла.

Выдержка из man find , для использования опции -newerXY

-NewerXY ссылка
Сравнивает временную метку текущего файла со ссылкой. Ссылочным аргументом обычно является имя файла (и для сравнения используется одна из его временных меток), но это также может быть строка, описывающая абсолютное время. X и Y являются заполнителями для других букв, и эти буквы выбирают, какое время относится к тому, как ссылка используется для сравнения.

       a   The access time of the file reference  
       B   The birth time of the file reference  
       c   The inode status change time of reference  
       m   The modification time of the file reference  
       t   reference is interpreted directly as a time  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .