Bash 如何更改不同文件夹中特定文件的名称
我有1000个files.txt文件,每个文件都存储在一个文件夹中。我想给每个文件添加一个数字 让我更详细但更简单地解释 假设我有10个文件夹,它们的名称是0,1,2,3。。。。10 然后我在每个文件夹中都有一个文件名dump.trg。 我想在每个dump.trg中添加一个数字,以便在文件夹0中有dump0.trg,在文件夹1中有dump1.trg,等等 我试着用下面的方法来做,但做不到Bash 如何更改不同文件夹中特定文件的名称,bash,Bash,我有1000个files.txt文件,每个文件都存储在一个文件夹中。我想给每个文件添加一个数字 让我更详细但更简单地解释 假设我有10个文件夹,它们的名称是0,1,2,3。。。。10 然后我在每个文件夹中都有一个文件名dump.trg。 我想在每个dump.trg中添加一个数字,以便在文件夹0中有dump0.trg,在文件夹1中有dump1.trg,等等 我试着用下面的方法来做,但做不到 a=0 for i in *dump.trg; do new=$(printf "$*.trg" "$a
a=0
for i in *dump.trg; do
new=$(printf "$*.trg" "$a")
mv -i -- "$i" "$new"
let a=a+1
done
你能告诉我你会怎么做吗?
谢谢根据你的描述,我很乐意
for i in *; do
mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done
或者,如果当前目录中有其他文件(或没有dump.trg
的其他子目录):
${i%.trg}
是没有其.trg
后缀的文件名(foo/dump.trg
->foo/dump
)
${i%/*}
是没有后缀的文件名(foo/dump.trg
->foo
)。实际上,它从$i
获取目录名,根据您的描述,我只需这样做
for i in *; do
mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done
或者,如果当前目录中有其他文件(或没有dump.trg
的其他子目录):
${i%.trg}
是没有其.trg
后缀的文件名(foo/dump.trg
->foo/dump
)
${i%/*}
是没有后缀的文件名(foo/dump.trg
->foo
)。实际上,它使用
删除-n
选项以实际重命名文件。使用
删除
-n
选项以实际重命名文件。我会使用[[-f“$I/dump.trg”]]和&mv…
另外,for I in*/
将循环限制为仅子目录。可以使用多个斜杠:ls-l~//.bash*
,很难看。无论如何,总比把非目录文件当作目录处理而出错要好。我会用[[-f“$I/dump.trg”]]和&mv…
还有,for I in*/
将循环限制在子目录。使用多个斜杠也没关系:ls-l~//.bash*
,很难看。无论如何,总比把非目录文件当作目录处理而出错要好。
mkdir {0..12}
touch {0..12}/dump.trg
rename -n 's{ ([^/]+) (/dump) (\.trg) }{$1$2$1$3}x' */dump.trg
rename(0/dump.trg, 0/dump0.trg)
rename(1/dump.trg, 1/dump1.trg)
rename(10/dump.trg, 10/dump10.trg)
rename(11/dump.trg, 11/dump11.trg)
rename(12/dump.trg, 12/dump12.trg)
rename(2/dump.trg, 2/dump2.trg)
rename(3/dump.trg, 3/dump3.trg)
rename(4/dump.trg, 4/dump4.trg)
rename(5/dump.trg, 5/dump5.trg)
rename(6/dump.trg, 6/dump6.trg)
rename(7/dump.trg, 7/dump7.trg)
rename(8/dump.trg, 8/dump8.trg)
rename(9/dump.trg, 9/dump9.trg)