如何在单行命令中重命名所有文件(没有for循环)?

时间:2018-01-20 17:22:04

标签: sed gawk

我想重命名我的主目录中的所有文件(例如abc),格式为(abc_bkp)而不使用任何循环,它应该是unix中的单行命令(bash脚本)。

2 个答案:

答案 0 :(得分:0)

如果您不想使用循环,那么我相信最好的方法可能是find命令,首先尝试使用以下命令作为DRY运行,一旦您满意结果,那么您可以删除{{1}从中得到真实的镜头。

echo

find -type f -or -type d | xargs -I % echo mv % %_bkp :来自-I页面:

  

-I replace-str             将初始参数中出现的replace-str替换为从标准输入读取的名称。此外,不带引号的空白不会   终止             输入项目;相反,分隔符是换行符。意味着-x和-L 1。

答案 1 :(得分:0)

如果目录中只包含文件,则应执行此操作:

ls | xargs -I {} mv {} {}_bkp

如果它包含您不想重命名的子目录,链接和其他内容,则必须过滤ls的输出。这是一种粗暴的方式;也许有人可以提出一个更优雅的方法:

ls -l | grep ^- | cut -d' ' -f 13 | xargs -I {} mv {} {}_bkp