我有这些文件和许多其他文件:
$ ls *
blue-3454534:
banana.txt file1.txt
green-junkjunk:
fever.txt vegan.txt
yellow-junkkkjunkkk:
funny.txt sunny.txt
我想运行一个重命名的命令(循环):
file1.txt到blue_file1.txt
fever.txt到green_fever.txt
vegan.txt到green_vegan.txt
funny.txt到yellow_funny.txt
所以你知道它会把它的父目录名放在开头(前缀),直到破折号(并忽略破折号后的剩余部分)
理想情况下,我会在1命令行循环中使用mv或rename命令。
此外,重命名的文件应保留在已存在的目录中。
感谢您的帮助。
PS:没有任何空间,也没有文件名和目录名
答案 0 :(得分:0)
假设目录的名称存储在变量subdir
中,并且文件名(没有目录部分)存储在变量文件中,一种以所需方式重命名的方法是< / p>
cd $subdir
mv $file ${subdir%-*}_$file
cd -
%-*
部分会在破折号之前为您提供目录名的一部分。
此解决方案适用于bash,zsh和ksh。
有关详细信息,%-
展开的工作原理,请参阅参数展开标题下 bash 联机帮助页中的优秀说明。对于Zsh,它位于名为 zshexpn 的手册页中,位于标题 PARAMETER EXPANSION (全部大写)下。对于 ksh ,该部分的名称只是参数。