Linux:如何将每个文件移动到相应命名的文件夹中

我在这里有一个小而有趣的任务。 我有一个相同的扩展名的文件列表,例如。

a.abc b.abc c.abc 

我想要的是首先为每个.abc文件创build名为abc …的文件夹,然后将每个文件夹移动到其文件夹中。

我能够使用cmd行find ... | sed ... | xargs mkdir...第一步 find ... | sed ... | xargs mkdir... find ... | sed ... | xargs mkdir... ,但是当我尝试使用类似的cmd将每个文件移动到自己的文件夹时,找不到答案。

我在这里没有stream利的cmd,我有一个非常模糊的内存,在find cmd我可以使用某种返回引用来重用文件/目录名称,我记得它错了吗? search了但没有find一个好的参考。

任何人都可以帮我完成cmd吗?

谢谢。

这是你的班轮

 find . -name "*.abc" -exec sh -c 'NEWDIR=`basename "$1" .abc` ; mkdir "$NEWDIR" ; mv "$1" "$NEWDIR" ' _ {} \; 

或者可选地

 find . -name "*.abc" -exec sh -c 'mkdir "${1%.*}" ; mv "$1" "${1%.*}" ' _ {} \; 

这是使用find比手册页更好的指导。

本页面介绍正在进行的参数扩展(了解${1%.*}

这是一个findxargs解决方案,它处理空格的文件名:

 find . -type f -print0 | xargs -0 -l sh -c 'mkdir "${1%.*}" && mv "$1" "${1%.*}"' sh 

请注意,它不支持换行符和/或shell扩展字符的文件名。

 for F in /tmp/folder/*.abc # replace by $1 for first arg do BASE="${F%.abc}" mv "$F" "$BASE" done