如何移动名称包含多个特殊字符(如“é”、“ä”、“空格”)的文件?

dmx*_*dmx 1 xargs special-characters locale mv

我正在尝试将我的文件从当前目录移动到另一个目录。我遇到的问题是多个文件的名称带有特殊字符,如space, ü, &, (, .... 如何使用以下命令移动我的所有文件:ls | grep mp4 | xargs -i mv {} mp4,其中{}应该是当前文件的名称,而 mp4 目标将放置我的所有文件。我已经尝试过该命令,但它显示错误。你能帮忙吗?

ilk*_*chu 5

这正是您不想使用的ls情况。或者xargs使用默认设置,它会将输入拆分为空格,并专门处理引号和反斜杠。您需要使用-0分隔空字节的输入,或-d'\n'分隔换行符 (GNU xargs) 以关闭该行为。

由于所有文件都在同一目录中,因此您可以只使用 shell:

mv *mp4* mp4/
Run Code Online (Sandbox Code Playgroud)

或者,mv *.mp4 mp4/如果您仅指具有mp4扩展名的文件。第一个会警告自己移动mp4mp4.)


如果文件不在同一目录中,您需要使用双星(zsh- 默认启用或kshwithset -o globstarbashwith shopt -s globstar):

mv **/*mp4* mp4/
Run Code Online (Sandbox Code Playgroud)

或者 find

find . -type f -name "*mp*" -exec mv {} mp4/ \;
Run Code Online (Sandbox Code Playgroud)