
現在のディレクトリから別のディレクトリにファイルを移動しようとしています。私が経験している問題は、名前に特殊文字を含む複数のファイルがあることです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 globstar
bash
shopt -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.txt
、lamp4.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 {} +