在UNIX中递归重命名文件

时间:2018-06-19 17:04:57

标签: unix rename ksh mv hp-ux

我知道这将被标记为重复项,但是我尝试搜索google,而我尝试执行的操作不适合我。

我在目录中有一些.txt文件,我需要将所有*.txt文件递归重命名为*_XYZ.txt。 XYZ在变量X中定义。

我尝试了以下代码:

file=`find ./ -type f -name "*.txt"|sed "s,^./,,g" |awk -F '.' '{print $1}'`

for i in "$file"
do
mv "$i" "$i_${X}.txt"
done

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

您的脚本破坏了变量file中的原始文件名,这就是为什么它无法重命名文件的原因。

工作示例:

X="_XYZ"
for f in $(find . -type f ! -name "*$X.txt" -name "*.txt"); do 
    mv "$f" "${f%.txt}$X.txt"
done

输出:

$ X="_XYZ"
$ find . -type f -name "*.txt"
./c_XYZ.txt
./aa/c.txt
./a.txt
./b.txt
$ for f in $(find . -type f ! -name "*$X.txt" -name "*.txt"); do mv "$f" "${f%.txt}$X.txt"; done
$ find . -type f -name "*.txt"
./b_XYZ.txt
./c_XYZ.txt
./aa/c_XYZ.txt
./a_XYZ.txt