Як зафіксувати список файлів у Linux


18

У мене є багато файлів, які мені потрібно зібрати в єдиний каталог. Я не хочу копіювати всі файли в каталозі, а лише ті, що відповідають певному запиту.

я зробив

grep abc file-* > out.txt 

створити файл із усіма примірниками "abc" у кожному файлі. Мені потрібні самі файли. Як я можу сказати bash, щоб завантажувати лише ті файли?


Wildcards не працює? Чому? Якщо я можу попросити ...
jherran

@jherran Я не хочу копіювати всі файли в каталозі, лише ті, що відповідають певному запиту. Я зробив grep abc file-* > out.txtфайл з усіма екземплярами "abc" у кожному файлі. Мені потрібні самі файли.
John Mangual

Що означає @jherran zip ZipFile.zip file-*, це очевидний спосіб зробити це. Проміжний файл вам знадобиться лише в тому випадку, якщо ви використовували складний findабо об'єднаний список файлів з різних пошуків.
AFH

Відповіді:


33

Дуже просто:

zip archive -@ < out.txt

Тобто, якщо ваш out.txtфайл містить одне ім’я файлу в рядку. Він додасть усі файли з out.txtодного архіву, який називається archive.zip.

Цей -@параметр змушує zipчитати з STDIN.

Якщо ви хочете пропустити створення тимчасового out.txtфайлу, ви також можете використовувати grepможливість друку імен файлів. -rвмикає рекурсивний пошук (можливо, у вашому випадку не знадобиться) та -lдрукує лише імена файлів:

grep -rl "abc" file-* | zip archive -@

Працює чудово, за винятком того, що у мене є список списку, де є пробіли у назвах файлів. Я спробував обидва уникнути їх з `` і не уникнути їх, один раз у лапках і один раз без лапок навколо імені файлу (один рядок - одне ім'я файлу). Досі нічого не працювало.
Томас В.

2
Я змусив його працювати з пробілами, що уникнули \ \ `, і жодних лапок у файлі, а також наступного:cat out.txt | while read line ; do xargs zip archive.zip $line ; done
Thomas W.

якщо ви хочете zip archive.zip $(ls common_name*)
зібрати

@ chepe263 Це порушується, якщо файли мають пробіли на своєму шляху. Як правило, не рекомендується аналізувати вихід.
slhck

Для будь-кого іншого на Mac, який завітав сюди за допомогою індексації пошукової системи, -@опція синтаксис працює чудово станом на 10.16, навіть незважаючи на те, що сторінка man все ще містить мову проnot on MacOS
Aidan Miles

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.