Linux如何使用其父目录为文件名添加后缀

时间:2016-09-08 22:40:13

标签: linux shell rename

我有这些文件和许多其他文件:

$ ls *
blue-3454534:
banana.txt  file1.txt

green-junkjunk:
fever.txt   vegan.txt

yellow-junkkkjunkkk:
funny.txt   sunny.txt

我想运行一个重命名的命令(循环):

  • banana.txt到blue_banana.txt
  • file1.txt到blue_file1.txt

  • fever.txt到green_fever.txt

  • vegan.txt到green_vegan.txt

  • funny.txt到yellow_funny.txt

  • sunny.txt到yellow_sunny.txt

所以你知道它会把它的父目录名放在开头(前缀),直到破折号(并忽略破折号后的剩余部分)

理想情况下,我会在1命令行循环中使用mv或rename命令。

此外,重命名的文件应保留在已存在的目录中。

感谢您的帮助。

PS:没有任何空间,也没有文件名和目录名

1 个答案:

答案 0 :(得分:0)

假设目录的名称存储在变量subdir中,并且文件名(没有目录部分)存储在变量文件中,一种以所需方式重命名的方法是< / p>

cd $subdir
mv $file ${subdir%-*}_$file
cd -

%-*部分会在破折号之前为您提供目录名的一部分。

此解决方案适用于bash,zsh和ksh。

有关详细信息,%-展开的工作原理,请参阅参数展开标题下 bash 联机帮助页中的优秀说明。对于Zsh,它位于名为 zshexpn 的手册页中,位于标题 PARAMETER EXPANSION (全部大写)下。对于 ksh ,该部分的名称只是参数