Я хочу переименовать ряд файлов. Я думаю, что могу использовать xargs для этого.

find ./ -name "upload.log-*" 
./upload.log-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180624.gz-20180626.gz
./upload.log-20180620.gz-20180622.gz-20180624.gz-20180626.gz
./upload.log-20180621.gz-20180623.gz-20180625.gz-20180627.gz

find ./ -name "upload.log-*" -print | cut -d"-" -f-2
./upload.log-20180622.gz
./upload.log-20180624.gz
./upload.log-20180620.gz
./upload.log-20180621.gz

Я пытаюсь следующее, но это не похоже на работу

find ./ -name "upload.log-*" | xargs -I '{}' sh -c "echo $1 $(echo $1 | cut -d"-" -f-2)" "{}"

1 ответ1

0

Это делает то, что мне нужно сделать

find ./ -name "cleanup.log-*" | xargs -I '{}' sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}

Сложно было преобразовать строку замены -ar { -ar -I {} в аргументы команды xargs sh -c ...
Я сделал это, поместив аргумент no option - в конце команды перед строкой замены {} .

Таким образом, моя команда xargs следующая.
sh -c 'mv "$1" $(echo {} | cut -d"-" -f-2)' - {}

Я использовал это, чтобы проверить, что я хотел до запуска команды перемещения

find ./ -name "upload.log-*" | xargs -I '{}' sh -c 'echo "$1" $(echo {} | cut -d"-" -f-2)' - {}

Я нашел этот сайт полезным в понимании, как решить эту проблему

https://explainshell.com

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .