Передача списка grep в качестве аргумента cp

Скажем, я хочу скопировать список файлов в другой каталог

-rw-rw----    Sep 1 11:06   File1.txt
-rw-rw----    Sep 1 11:06   File101.txt
-rw-rw----    Sep 3 11:06   File2.txt    
-rw-rw----    Sep 4 11:06   File303.txt  

Я хотел бы grep все файлы, которые имеют 1 сентября там

ls -lrt | grep 'Sep 1'

и попробуйте передать его в качестве аргумента cp

cp `ls -lrt | grep 'Sep 1'` /directory/
or
cp $(ls -lrt | grep 'Sep 1') /directory/

со вторым вариантом я, который является недопустимым именем переменной, не могли бы вы помочь мне с этим?

1 ответ

Не разбирайте вывод ls: Почему вы не должны анализировать вывод ls.

Вместо этого вы можете сделать что-то вроде:

cp *1* /directory/

это *1* будет соответствовать всему, что содержит 1 и будет применяться к cp команда, так что она будет расширена до чего-то вроде:

cp File1.txt File2.txt File303.txt File101.txt /directory/

Обновить

Первое решение было бы сделать следующее: напечатать имя файла после grepпинг тех файлов, время модификации которых Sep 1, На основании этого вывода скопируйте:

cp $(ls -1 | awk '/Sep 1/{print $NF}') /directory/

Но это очень хрупко, потому что имена файлов с пробелами копироваться не будут, а также общий факт, что синтаксический анализ ls - плохая идея.

Вместо этого, если вы хотите переместить файлы, которые были изменены за последние 24 часа, вы можете сделать это:

find . -maxdepth 1 -type f -mtime -1 -exec cp {} /directory/ \;
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^
       performs the search           copies the matches to the dir

Или также добавить -daystart соответствовать "созданному сегодня", а не за последние 24 часа: find . -maxdepth 1 -type f -daystart -mtime -1 ...

Другие вопросы по тегам