我有1000个.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")
mv -i -- "$i" "$new"
let a=a+1
done
能否请您告诉我您将如何进行? 谢谢
答案 0 :(得分:1)
根据您的描述,我会简单地
for i in *; do
mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done
或者,如果当前目录(或其他没有dump.trg
的子目录)中还有其他文件:
for i in */dump.trg; do
mv -i -- "$i" "${i%.trg}${i%/*}.trg"
done
${i%.trg}
是不带后缀.trg
(foo/dump.trg
-> foo/dump
)的文件名。
${i%/*}
是不带后缀/...
(foo/dump.trg
-> foo
)的文件名。有效地,它从$i
获取目录名称。
答案 1 :(得分:1)
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)
删除-n
选项以实际重命名文件。