在一个目录中,我有几个子目录,命名如下([1-9] 表示从 1 到 9):
AA_BB_CC_river[1-9]
每个子目录都包含一个与该目录同名的文件 (ascii)。我在几个子目录(及其随附文件)的命名中犯了一个错误:
AA_BB_CC_rier[1-9]
如何在子目录和所附文件命名中替换rier
by ?river
答案1
如果您允许外部程序,您可以使用find
和rename
:
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
重命名目录本身。