匹配和重新格式化输入错误的文件名

matching and reformatting poorly typed filenames

我有大量格式不正确的文件名,我想清理它们。我们的想法是重新格式化名称,使它们更合理。

这里有一些例子:

01harpharm_3.1.aiff 1
01harpmute_2.6.aiff 1
01harpmute_2.6.aiff 2
01harpmute_2.6.aiff 3
01harpmute_2.6.aiff 4

如果我们看最后一个例子,目标是重写

01harpmute_2.6.aiff 4 作为 01harpmute_2.6.4.aiff.

我想为此使用 bash,通过脚本(for 循环)、查找、重命名或它们的组合。 有人对如何最好地解决这个问题有意见吗?

能否请您尝试关注一次。以下只会在屏幕上打印重命名命令,你可以从它 运行 1 命令,如果你对结果满意,那么你可以 运行 我的第二个代码。

find . -type f -name "*.aiff*" -print0 | 
while IFS= read -r -d '' file
do
  echo "$file" | 
  awk '
    BEGIN{ s1="\"" }
    { val=[=10=]; sub(/^\.\//,""); sub(/\.aiff/,".""&",)
      print "mv " s1 val s1 OFS 
    }'
done

或者,如果您想设置条件并检查文件名是否具有 space,那么在 awk 命令中添加一个附加条件,它将跳过没有 space 的文件] 在他们的名字里。

find . -type f -name "*.aiff*" -print0 | 
while IFS= read -r -d '' file
do
  echo "$file" | 
  awk '
    BEGIN{ s1="\"" }
    NF==2{ val=[=11=]; sub(/^\.\//,""); sub(/\.aiff/,".""&",)
      print "mv " s1 val s1 OFS 
    }'
done


运行只有在您成功测试以上代码后,才能进行后续操作。

find . -type f -name "*.aiff*" -print0 | 
while IFS= read -r -d '' file
do
  echo "$file" | 
  awk '
    BEGIN{ s1="\"" }
    { val=[=12=]; sub(/^\.\//,""); sub(/\.aiff/,".""&",)
      print "mv " s1 val s1 OFS 
    }' | sh
done