我在 shell 脚本中有以下两行,想知道是否有任何方法可以使用 sed 将它们压缩为一行。我不确定是否有通配符或任何可以替换其中的单词 Glitch 和 Chill 的东西,但如果有,我想知道。真正重要的是,它会删除您看到的奇怪括号中的所有内容,而不会影响其他任何内容。
find . -type f -name '【Chill*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Chill.*】//'); mv -v "$file" "$new"; done' _ {} +
find . -type f -name '【Glitch*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Glitch.*】//'); mv -v "$file" "$new"; done' _ {} +
答案1
您知道使用 Perl 的重命名可以完成所有操作吗:
$ rename -n 's:【Chill.*】|【Glitch.*】::' 【Chill* 【Glitch*
【Chillxx】file1.ext renamed as file1.ext
【Chillyy】file2.ext renamed as file2.ext
【Glitchxx】file3.ext renamed as file3.ext
【Glitchyy】file4.ext renamed as file4.ext
答案2
find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c
'for file in "$@"; do
new=$(echo "$file" | sed -r 's/【Chill.*】\|【Glitch.*】//');
mv -v "$file" "$new";
done' _ {} +
答案3
答案@赛勒斯很好,但如果没有sed
,并且使用简化的for
循环,效果会更好:
find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c
'for file; do
new=${file/【Chill*】/};
new=${new/【Glitch*】/};
mv -v "$file" "$new";
done' _ {} +