我这里有一个小但有趣的任务.我有一个具有相同扩展名的文件列表,例如.
a.abc
b.abc
c.abc
Run Code Online (Sandbox Code Playgroud)
我想在这里是先创建文件夹叫a,b,c...每一个.abc文件,然后将每一个到它的文件夹中.
我能够使用cmd线直接完成第一步find ... | sed ... | xargs mkdir...,但是当我尝试使用类似的cmd将每个文件移动到自己的文件夹中时,我找不到答案.
我不熟悉这里的cmd,而且我有一个非常模糊的内存,在findcmd中我可以使用某种后向引用来重用文件/目录名,我记得它错了吗?搜索了一下但找不到好的参考.
谁能帮助我在这里完成cmd?
谢谢.
twm*_*wmb 15
这是你的一个班轮
find . -name "*.abc" -exec sh -c 'NEWDIR=`basename "$1" .abc` ; mkdir "$NEWDIR" ; mv "$1" "$NEWDIR" ' _ {} \;
Run Code Online (Sandbox Code Playgroud)
或者
find . -name "*.abc" -exec sh -c 'mkdir "${1%.*}" ; mv "$1" "${1%.*}" ' _ {} \;
Run Code Online (Sandbox Code Playgroud)
而这是在用更好的指导find比手册页.
这个页面解释了正在进行的参数扩展(了解${1%.*}
这是一个find和xargs它处理文件名带有空格的解决方案:
find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "$1" "${1%.*}"' sh
Run Code Online (Sandbox Code Playgroud)
请注意,它不支持带换行符和/或shell可扩展字符的文件名.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           6040 次  |  
        
|   最近记录:  |