использование xargs передача аргументов в Sub shell с помощью pipe

Я хочу переименовать несколько файлов. Думаю, я могу использовать для этого 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  $(echo  | cut -d"-" -f-2)" "{}"
7
задан nelaaro
12.12.2022 10:08 Количество просмотров материала 3310
Распечатать страницу

1 ответ

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

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

хитрый бит преобразования замены xargs -I {} строка в аргументы для команды xargs sh -c ....

Я сделал это, поставив аргумент без вариантов -, в конце команды перед строкой замены {}.

таким образом, моя команда xargs следующая.

sh -c 'mv "" $(echo {} | cut -d"-" -f-2)' - {}

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

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

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

https://explainshell.com

0
отвечен nelaaro 2022-12-13 17:56

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

bash
command-line-arguments
pipe
sh
xargs
Вверх