Linux Xargs трюки, чтобы переименовать файл - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу скопировать файлы в каталог архива путем

  • , удалив расширение gz
  • , добавив дату к имени файла, а затем
  • добавив расширение gzназад

Вот моя попытка

find . -maxdepth 1 -name '*.gz'|xargs  -I{} cp {} archive/{}.$(date '+%Y%m%d').gz

Предположим, что существует файл с именем test1.txt.gz

что он дает мне

test1.txt.gz.20181214.gz

Что я хочу, это

test1.txt.20181214.gz

Есть идеи, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Если у вас есть GNU Parallel, это выглядит так:

find . -maxdepth 1 -name '*.gz'| parallel cp {} archive/{.}.$(date '+%Y%m%d').gz
0 голосов
/ 14 декабря 2018

Вы можете использовать следующую команду:

find . -maxdepth 1 -name '*.gz'| sed 's/\.gz$//' | xargs -I{} cp {}.gz archive/{}.$(date '+%Y%m%d').gz

, где вы добавляете промежуточную обработку через sed для удаления конечного расширения ".gz".

Вам также необходимо адаптировать команду cp и добавить «.gz» к файлам, которые будут скопированы, чтобы избежать ошибок при обнаружении файлов : cannot access '...': No such file or directory, так как команда xargs не будет иметь полных имен файловбольше.

...