Когда я использую xargs
, иногда мне не нужно явно использовать заменяющую строку строка:
find . -name "*.txt" | xargs rm -rf
В других случаях я хочу указать заменяющую строку, чтобы делать такие вещи, как:
find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar
Предыдущая команда перемещала все текстовые файлы в текущем каталоге в /foo
, и это добавит расширение bar
ко всем файлам.
Если вместо добавления какого-либо текста к строке замены я хочу изменить эту строку так, чтобы я мог вставить некоторый текст между именем и расширением файлы, как я могу это сделать?Например, допустим, я хочу сделать то же самое, что и в предыдущем примере, но файлы должны быть переименованы/перемещены из <имя>.txt
в / foo/
(вместо /foo/
).
UPDATE: мне удалось найти решение:
find . -name "*.txt" | xargs -I{} \
sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; \
mv "$1" "foo/${name}.bar.${ext}"' -- {}
Но мне интересно, есть ли более короткое/лучшее решение ион.