更改目录和包含文件的名称

更改目录和包含文件的名称

在一个目录中,我有几个子目录,命名如下([1-9] 表示从 1 到 9):

AA_BB_CC_river[1-9]

每个子目录都包含一个与该目录同名的文件 (ascii)。我在几个子目录(及其随附文件)的命名中犯了一个错误:

AA_BB_CC_rier[1-9]

如何在子目录和所附文件命名中替换rierby ?river

答案1

如果您允许外部程序,您可以使用findrename

find . -type f -name '*_rier*' -exec rename 's/rier/river/g' {} \+
find . -type d -name '*_rier*' -exec rename 's/rier/river/g' {} \+

如果您不想使用外部工具,您可以使用

# rename directories
for f in *rier*; do
  mv -- "$f" "${f/rier/river}"
done

# rename files
for f in */*rier*; do
  mv -- "$f" "${f/rier/river}"
done

这首先重命名目录,然后重命名文件。

答案2

for file in $(find . -depth -name '*rier*'); do 
  mv $file $(echo $file | sed -e 's/rier/river/');
done

答案3

for循环:

for d in AA_BB_CC_rier*; do
  [ -d "$d" ] && \
    mv -v -- "$d/$d" "$d/${d/rier/river}" && \
    mv -v -- "$d" "${d/rier/river}"
done

  • for循环遍历所有以 . 开头的项目AA_BB_CC_rier
  • [ -d "$d" ]检查它是否是一个目录。
  • mv重命名目录中的文件。
  • 第二次调用mv重命名目录本身。

相关内容