Передача списка 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 ...