スペースを含む複数の.aviファイルをCDからホームフォルダに移動しようとしています。スペースを削除する方法を既に知っています。
find /media/mathscd/ | grep -L -r "*.avi" | for file in *; do mv "$file" echo $file | tr ' ' '_' ; done
ところで、編集されたファイルを見つけてフォルダにまとめて移動するのが困難です。エラーメッセージが表示され続けますmv: cannot stat '(standard input)': No such file or directory
。これは私が使用したいコードです:
find /media/mathscd/ | grep -L -r "*.avi" | xargs -I{} mv {} /home/09murphyt/Downloads/
誰かが私が間違っていることを教えてもらえますか?
答え1
問題はマニュアルページで-L
次のようになります。grep
L, --files-without-match は
通常の出力を抑制します。代わりに、通常は印刷されない各入力ファイルの名前を印刷します。検索は最初の一致で停止します。
だからリストする代わりにファイル名一致しない項目のみがavi
リストされます。場所どこにもgrep
見つかりませんavi
。grep
検索は通常ファイル内で行われるため、これらのスイッチはavi
パターンを含まないファイル名をリストします。しかし、あなたの場合はgrep
fromでパイプしているので、find
読んでいるファイルはgrep
です(standard input)
。どういう意味かを見るには、以下を試してください。
find /media/mathscd | grep -L "*.avi"
結果:
(standard input)
つまり、grep
見つかった行が"*.avi"
標準入力と一致しません。これはすぐに発生します。
ファイル名が直接リストされているので、find
一致の意味を逆にするだけです。
find /media/mathscd | grep -v ".*\.avi"
(grep
パターンはシェルワイルドカードと同じではありません。スイッチも必要ありません-r
。)
またはfind
単独で使用:
find /media/mathscd ! -name "*.avi"
答え2
次のいずれかを試してください。
find /media/mathscd/ -name *.avi -exec mv -t ~/Downloads/ {} +
find /media/mathscd/ -name *.avi -print0 | xargs -0 mv -t ~/Downloads/
xargs mv*
まず交換してテストしてみてくださいxargs ls
。