名前に複数の特殊文字(「é」、「ä」、「space」など)を含むファイルを移動するには?

名前に複数の特殊文字(「é」、「ä」、「space」など)を含むファイルを移動するには?

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

答え1

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

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

mv *mp4* mp4/

mv *.mp4 mp4/または、拡張子があるファイルのみを意味する場合。mp4最初は、mp4に移動するように警告しますmp4。 )


ファイルが同じディレクトリにない場合は、二重アスタリスク(デフォルトでは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 {} +

関連情報