我这里有一个小但有趣的任务.我有一个具有相同扩展名的文件列表,例如.
a.abc
b.abc
c.abc
Run Code Online (Sandbox Code Playgroud)
我想在这里是先创建文件夹叫a
,b
,c
...每一个.abc
文件,然后将每一个到它的文件夹中.
我能够使用cmd线直接完成第一步find ... | sed ... | xargs mkdir...
,但是当我尝试使用类似的cmd将每个文件移动到自己的文件夹中时,我找不到答案.
我不熟悉这里的cmd,而且我有一个非常模糊的内存,在find
cmd中我可以使用某种后向引用来重用文件/目录名,我记得它错了吗?搜索了一下但找不到好的参考.
谁能帮助我在这里完成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可扩展字符的文件名.