名前に「é」「ä」「スペース」などの複数の特殊文字が含まれるファイルを移動するにはどうすればよいですか?

名前に「é」「ä」「スペース」などの複数の特殊文字が含まれるファイルを移動するにはどうすればよいですか?

現在のディレクトリから別のディレクトリにファイルを移動しようとしています。問題は、複数のファイルの名前に などの特殊文字が含まれていることですspace, ü, &, (, ...。 などのコマンドを使用してすべてのファイルを移動するにはどうすればよいですか。ls | grep mp4 | xargs -i mv {} mp4ここで{}は現在のファイルの名前で、mp4 はすべてのファイルの保存先です。コマンドを試しましたが、エラーが表示されます。助けてもらえますか?

答え1

まさにこの状況だ使いたくないlsまたは、デフォルト設定では、スペースで入力を分割し、引用符とバックスラッシュを特別に処理します。この動作をオフにするには、ヌルバイトで入力を分割するか、改行 (GNU xargs) で分割するxargs必要があります。-0-d'\n'

すべてのファイルが同じディレクトリにあるため、シェルを使用するだけです。

mv *mp4* mp4/

または、拡張子が でmv *.mp4 mp4/あるファイルのみを意味する場合。最初のものはへの移動について警告します。mp4mp4mp4


ファイルが同じディレクトリにない場合は、zshデフォルトで有効になっている二重星 ( - ) を使用するか、またはまたはkshを使用する必要があります。set -o globstarbashshopt -s globstar

mv **/*mp4* mp4/

またはfind

find . -type f -name "*mp*" -exec mv {} mp4/ \;

答え2

コマンド:

ls | grep mp4 | xargs -i mv {} mp4

ほとんどの場合、よりシンプルで堅牢な次のものに置き換えることができます。

mv *mp4* mp4

ディレクトリ mp4 は内部では移動できないという警告は無視できます。

このスクリプトは、あなたのスクリプトと同様に、mp4名前のどこかに「 」が含まれるすべてのファイルを移動します (例: mp4list.txtlamp4.jpg)。実際に拡張子「.mp4」を持つファイルのみを移動したい場合は、次を使用できます。

mv *.mp4 mp4

これにより、ディレクトリmp4自体に関するエラー メッセージが発生する状況を防ぐことができます。

mp4 ファイルの数が多くて前述のコマンドが機能しない場合は、GNU を使用してfind同じことを実現できます。

find . -maxdepth 1 -name "*mp4*" -exec mv -t mp4 {} +

または

find . -maxdepth 1 -name "*.mp4" -exec mv -t mp4 {} +

関連情報