在unix中递归重命名文件
renaming the files recursively in unix
我知道这会被标记为重复,但我尝试搜索 google 但我尝试的搜索对我不起作用。
我在目录中有一些 .txt
文件,我需要递归地将所有 *.txt
文件重命名为 *_XYZ.txt
。 XYZ 在变量 X
.
中定义
我试过下面的代码:
file=`find ./ -type f -name "*.txt"|sed "s,^./,,g" |awk -F '.' '{print }'`
for i in "$file"
do
mv "$i" "$i_${X}.txt"
done
如有任何帮助,我们将不胜感激。
谢谢。
您的脚本破坏了变量 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
我知道这会被标记为重复,但我尝试搜索 google 但我尝试的搜索对我不起作用。
我在目录中有一些 .txt
文件,我需要递归地将所有 *.txt
文件重命名为 *_XYZ.txt
。 XYZ 在变量 X
.
我试过下面的代码:
file=`find ./ -type f -name "*.txt"|sed "s,^./,,g" |awk -F '.' '{print }'`
for i in "$file"
do
mv "$i" "$i_${X}.txt"
done
如有任何帮助,我们将不胜感激。 谢谢。
您的脚本破坏了变量 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