我有一堆带有随机名称和数字的mp3文件,例如:
出于排序目的,我需要在文件名之前添加一个序列号,例如:
我检查了发现的here解决方案。第一种解决方案可以工作,但替换文件名而不是添加文件名。
num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done
如何修改此命令以添加到文件名呢? 很抱歉,但是无论我如何尝试,我自己都无法在此处找到解决方案。
答案 0 :(得分:2)
只需将In [14]: TfidfVectorizer(binary=True).fit_transform(data).todense()
Out[14]:
matrix([[ 0.35355339, 0. , 0. , 0.35355339, 0.35355339,
0. , 0. , 0.35355339, 0.35355339, 0. ,
0.35355339, 0.35355339, 0.35355339, 0. , 0. ],
[ 0. , 0.37796447, 0.37796447, 0. , 0. ,
0.37796447, 0.37796447, 0. , 0. , 0.37796447,
0. , 0. , 0. , 0.37796447, 0.37796447]])
(即文件的原始名称)替换${i#*.}
(代表“从左侧从$ i到第一个点的删除),即文件的原始名称(我可能会使用{ {1}},$i
或至少$filename
,而不是$oldfile
作为变量名)。
您也可以将$f
之前的$i
替换为.
,否则文件将被命名
_
等
答案 1 :(得分:1)
更新:正如RobC对此答案的评论,由于将ls
命令与bash数组一起使用,现有的空格或换行符可能会导致列表文件出现问题。因此,上述代码可以通过这种方式进行改进
#!/bin/bash
i=0
for file in *.mp3; do
i=$((i+1))
mv "$file" "$(printf "%03d_%s" "$i" "$file")"
done
原始答案::您可以在bash脚本中尝试使用此代码。记住要使其可执行
$ chmod +x script.sh
。
#!/bin/bash
contents_dir=($(ls *.mp3))
for file in ${!contents_dir[*]}; do
new=$(awk -v i="$file" -v cd="${contents_dir[$file]}" 'BEGIN {printf("%03d_%s", i+1, cd)}')
mv ${contents_dir[$file]} $new
done
它将向您在执行脚本的目录中找到的所有mp3文件中添加您想要的连续的0导树数字。
答案 2 :(得分:0)
您可以尝试...
$ ls -l
total 4
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 01.filecdc.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 01_fileabc.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 929-audio.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 fileabc.mp3
$ t=0
$ for i in *mp3
> do
> # Use the seq command to get a formatted zero filled string.
> prefix=$(seq -f "%04g" $t $t)
>
> # Move $i to new file name.
> mv $i ${prefix}_${i}
>
> # Increment our counter, t.
> t=$(expr $t + 1)
> done
$ ls -l
total 4
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 0000_01.filecdc.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 0001_01_fileabc.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 0002_929-audio.mp3
-rw-r--r-- 1 plankton None 5 Nov 4 13:35 0003_fileabc.mp3