bash – 修改xarg中的替换字符串

前端之家收集整理的这篇文章主要介绍了bash – 修改xarg中的替换字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用xargs有时我不需要明确使用替换字符串:
find . -name "*.txt" | xargs rm -rf

在其他情况下,我想指定替换字符串,以便执行以下操作:

find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar

上一个命令会将当前目录下的所有文本文件移动到/ foo中,并将扩展名附加到所有文件

如果不是将一些文本附加到替换字符串,我想修改该字符串,使我可以在文件名称和扩展名之间插入一些文本,我该怎么做?例如,假设我想做与上一个例子相同的操作,但文件应该从< name> .txt重命名/移动到/foo/\u0026lt;name\u0026gt..bar.txt(而不是/ foo / < name> .txt.bar)。

更新:我设法找到一个解决方案:

find . -name "*.txt" | xargs -I{} \
    sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; \
           mv "$1" "foo/${name}.bar.${ext}"' -- {}

但我想知道是否有一个更短/更好的解决方案。

在这样的情况下,while循环将更加可读:
find . -name "*.txt" | while IFS= read -r pathname; do
    base=$(basename "$pathname"); name=${base%.*}; ext=${base##*.}
    mv "$pathname" "foo/${name}.bar.${ext}"
done

请注意,您可能在不同的子目录中找到具有相同名称文件。你确定重复的被mv覆盖吗?

原文链接:https://www.f2er.com/bash/388931.html

猜你在找的Bash相关文章