Как скопировать несколько “.gz” файлов от подкаталогов до одного каталога путем захвата ключевого слова?

Мне была бы нужна команда для копирования файлов от нескольких каталогов до одного каталога (/home/c/), которые все имеют "ZA*3094 ~". Обратите внимание, что файлы находятся в сжатом формате (gz).

Пример:/home/a/20180901/file.gz/home/a/20180902/file1.gz/home/a/20180903/file2.gz/home/a/20180903/file3.gz

0
задан 26 September 2018 в 12:37

2 ответа

Команда zgrep должна помочь, у меня есть этот пример

mv $(find a/*/* -type f -name "*.gz" -exec zgrep -l 'nob' {} \;) /tmp

Команда выполняет следующее:

  • zgrep подобно grep использует -l ] опция для возврата имен файлов, которые содержат искомое слово nob
  • mv $(find a/*/* -type f -name "*.gz" -exec zgrep -l 'nob' {} \;) /tmp будет перемещать любые возвращенные файлы с расширением .gz в папку /tmp
0
ответ дан 27 October 2019 в 09:57

Можно использовать foor цикл

IFS=$'\n'; for i in $( find <source_directory> -type f | grep '.gz$'); do echo cp \"$i\" \"<destination_directory>\"; done

замена <source_directory> и <destination_directory>

  • IFS предотвратит пути разделения, содержащие пространство в несколько строк
  • найдите с -type f только возвратит файлы
  • grep отфильтрует для файлов, заканчивающихся .gz
  • echo для пробного прогона, Если все смотрит хорошо просто, удаляют эхо
0
ответ дан 27 October 2019 в 09:57

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

Похожие вопросы: