Ответ 1
Используйте параметр -exec
для find
:
find . -mtime -90 -exec cp {} targetdir \;
-exec
копирует каждый результат, возвращаемый find
в указанный каталог (targetdir
в приведенном выше примере).
Это может быть дублированный вопрос, но я не мог найти решение для этого. Я хочу скопировать последние 3 месяца файлы из одного каталога в другой каталог, но я могу найти только список файлов, используя следующую команду.
find . -mtime -90 -ls
Я действительно не знаю, как копировать файлы с помощью -mtime
. Я новичок в Linux, помогите мне.
Используйте параметр -exec
для find
:
find . -mtime -90 -exec cp {} targetdir \;
-exec
копирует каждый результат, возвращаемый find
в указанный каталог (targetdir
в приведенном выше примере).
Используйте эту команду:
for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done
Можно также выбрать точную дату и время, кроме возврата к определенному количеству дней.
cp `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER
Выше копии всех файлов в каталоге, созданных после 18 сентября 2016 года 20:05:00, к ПАДЕНИТЕ (за 3 месяца до сегодняшнего дня:)
Будьте осторожны с символом команды find, это НЕ это: это так, backtick: ` выбор даты с этим: '
Если у вас есть файлы с пробелами, новыми символами, вкладками или подстановочными знаками в их именах, вы можете использовать любое из решений Stéphane Chazelas, сначала для GNU, второе для GNU или некоторых BSD:
find . -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} +
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "[email protected]" FOLDER' sh {} +
Я предполагаю, что я бы сначала сохранил список файлов и использовал цикл.
find . -mtime -90 -ls >/tmp/copy.todo.txt
Вы можете прочитать список, если он не слишком большой, с
for f in `cat /tmp/copy.todo.txt`;
do echo $f;
done
Примечание: кавычки вокруг cat... являются backquotes, часто в верхнем левом углу клавиатуры
Затем вы можете заменить команду echo командой copy:
for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done
Пример: выберите день 09/08/2017
ls -l
-rw-rw-rw- 1 root system 943 Aug 09 02:59 File
for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
do
mv $j $Destination;
done