将文件夹中的文件重命名为一个名称

我在不同的文件夹中有多个.pdb文件。如何遍历整个目录,将所有文件命名为一个特定名称test.pdb?

样本结构

file1 
 file1.pdb
 xyz.txt

file2
 file2.pdb 
 xyz.txt

file3
 file3.pdb
 xyz.txt

所需的输出结构

file1
 test.pdb
 xyz.txt

file2
 test.pdb
 xyz.txt

file3
 test.pdb
 xyz.txt

我目前正在使用的代码:

for d in */ ; do
    mv *.pdb test.pdb
done

但是它不起作用。

sonybmw2007 回答:将文件夹中的文件重命名为一个名称

您需要包括目录名称。只是*.pdb会始终扩展到当前目录中与通配符匹配的文件。

for d in ./*/ ; do
    mv "$d/"*.pdb "$d/"test.pdb
done

为了预防起见,我在通配符前也添加了./。如果文件名以破折号开头,则可以避免出现问题,然后将其解释为mv的选项,而没有前导破折号。

许多mv实现将拒绝将多个文件移动到相同的目标名称,因此,只有在通配符扩展到每个目录中的一个文件时,这才可能起作用。 (零匹配有效,但会发出嘈杂的警告。)

,

尝试一下

for d in */; do
  if [ -f $d/*.pdb ] ;then
    mv $d/*.pdb $d/test.pdb
  fi
done
,

替代解决方案,迭代pdf文件,而不是文件夹名称。

尚不清楚其他名称与文件夹名称不匹配的pdb文件是否也应受到影响。此条件的代码测试。如果不需要,可以将其删除。

for file in */*.pdb ; do
    d=$(dirname $file)
    b=$(basename $file .pdb)
    [ "$d" = "$b" ] && mv "$d/$b.pdb" "$d/test.pdb"
done
本文链接:https://www.f2er.com/3120759.html

大家都在问