Linux如何向文件名及其父目录添加后缀
我有这些文件和许多其他文件:Linux如何向文件名及其父目录添加后缀,linux,shell,rename,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.
$ 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
- fully.txt至黄色\u fully.txt
- sunny.txt到yellow_sunny.txt
PS:文件名和目录名中都没有空格假定目录名存储在变量
子目录中,文件名(不含目录部分)存储在变量文件中,以所需方式重命名它的一种方法是
cd $subdir
mv $file ${subdir%-*}_$file
cd -
%-*
部分在破折号之前获取directoryname的部分
此解决方案适用于bash、zsh和ksh
有关%-
扩展如何工作的详细信息,请参阅bash手册页中“参数扩展”标题下的精彩解释。对于Zsh,它位于名为zshexpn的手册页中,并位于“参数扩展”(全部大写)标题下。对于ksh,节的名称只是参数 你试过什么?所以这不是免费的编码服务。这应该是一个简单的for
循环。如果重命名的文件仍保留在它们的子目录中,那么您将有blue/blue\u banana.txt
等?@KeithThompson是的,它们应该保留。谢谢,请更新问题以反映这一点。请参阅@Barmar的评论。@Barmar我只在*中为subdir做了;执行mv$subdir/file.txt$subdir.txt;完成
,但它会将整个文件名重命名为父目录名。您可能需要添加一点,即您依赖于删除子字符串的参数扩展,并解释这是什么以及如何使用它(在不止一个单独的情况下)。无需使用子字符串替换进行参数扩展,但至少应涵盖'%'
,'%'
,''.'.'.'.'.'.'和'.\/code>的情况。这一点很好。这些东西在手册页中很难找到,我会指出在哪里可以找到它(手册页中的解释比我自己能写的任何东西都好)。。。