
Linuxで*をつかってファイル移動をしたいのですが、
引数リストが長すぎますとエラーが出ます。
解決方法を教えてください!
例えば、何千個もあるpng画像ファイルをABCフォルダに入れたいとき、
mv *.png ABC/
とすると
-bash: /bin/mv/: 引数リストが長すぎます
とエラーが出ます。
Linux初心者なもので、具体的にどのように入力したらいいのか、
お教えください。
よろしくお願いします。
A 回答 (8件)
- 最新から表示
- 回答順に表示
No.8
- 回答日時:
find ./ -type f -name "*.png" -print0 | xargs -0 -I{} mv {} <destination>
ではいかが。
うまく行かないようなら、
find . -type f -name "*.png" -exec mv {} <destination> \;
も試してみてください。ちなみにセミコロンの前にあるのは、バックスラッシュです。ここに書き込んだ時点で文字化けしているかもしれないので、コピペでなく手入力してください。
No.7
- 回答日時:
> mv a*.png ABC/
> mv b*.png ABC/
> |
> mv z*.png ABC/
そんなスクリプトじゃ a*.png とかが数千個あれば結局同じ事です。それに「あいうえお.png」とかはどうするんですか?
書くとすれば
cd source_directory
find . -type f -name "*.png" | \
while read filename
do
mv $filename /target_directory/
done
でしょうかね。でもこれもファイル名にスペースがあったりするとうまく行かない可能性があるので、やはり xargs を利用した1行コマンドがベストです。
No.5
- 回答日時:
#2~#4 さんは誤解されているようですが、mv コマンドが動かないんじゃなくて、対象ファイルが数千とか数万の単位になると、シェルが展開できなくなってエラーが起きるという事です。
ですから、検証するなら数千個のファイルを作らないと意味がないですよ。本題については、#1 さんの書かれているとおり xargs を使うか、find コマンドの exec オプションが '+' をサポートしているタイプなら
find . -type f -name "*.png" -exec mv {} <destination> +
とすればいいでしょう。
この回答への補足
回答ありがとうございます。
findでやってみると
find: `-exec' に引数が見つかりません
とエラーがでました。
どうしたらいいのでしょうか?
No.4
- 回答日時:
気になったので、外付けHDDをつないで
VM配下でCentOS(RHEL互換)を立ち上げて実験してみました。
1).abc.txtを作成して、さらにコピーでcde.txtを作る。
2).カレントの下にABCディレクトリを作成して、パーミッションを777にする。
3).mv *.txt ABC/
正常に実行されます。
シェルは、デフォルトでbashなのでbashを使用しました。
次に、UNIX(Solaris 10)で同じ実験をします。
# mkdir ABC
# chmod 777 ABC
# bash ※ここで、シェルが違うのに気付いた^^;
bash-3.00# cp abc.txt cde.txt
bash-3.00# mv *.txt ABC/
bash-3.00# cd ABC
bash-3.00# ls
abc.txt cde.txt
うまくいってます。
もしかして、ものすごく古いLinuxをお使いですか? Redhat 9とか?
この回答への補足
何度も回答ありがとうございます。
2,3個のファイル移動はできるのですが2000個になると出来ませんでした。
vine Linux 5(?) を使っています。
No.3
- 回答日時:
外付けHDDをつなげないとLinuxが上がらないので
机上で答えています。
1).まず
mv *.{png} A/
2).上記が失敗したら
mv *.{png, dummy} A/
※dummyという拡張子のファイルが無いものと仮定します。
うまくいかないときには、明日つなげて試してみます。
No.1
- 回答日時:
この回答への補足
解答ありがとうございます。
ファイル数は2000個くらいです。
サイトを見たのですが、具体的にどうしたらいいかわかりませんでした・・・。
どう入力したらいいのでしょうか?
初心者ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
スラッシュ"/"を削除したい
-
バッチで特定文字が含まれる先...
-
【DOSコマンド】for文の中で変...
-
スクリプトのエラー「unexpecte...
-
ファイル名についている「-」と...
-
ファイル名一覧の印刷
-
IPアドレスだとPingが通るのに...
-
SONYの音楽ソフト「x-アプリ」...
-
Dirコマンドでフォルダ内ファイ...
-
TOPコマンドで表示するCPU使用...
-
pingは正常なのにtracerouteで...
-
ファイルが消せない、移動でき...
-
エクセルの表にヘンな枠が・・・
-
テキストファイルから最終行の抽出
-
LinuxでUSBをマウントできない
-
Linux のシェルスクリプトの強...
-
バッチファイル内の各コマンド...
-
net use /d の強制実行
-
grepで全角文字の行を抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
【DOSコマンド】for文の中で変...
-
標準出力とリダイレクトを同時...
-
スラッシュ"/"を削除したい
-
OSXで常に最後に表示される文字...
-
renameコマンドでファイル名か...
-
*.txtファイルの最終行だけ参照...
-
バッチで特定文字が含まれる先...
-
ファイル名一覧をデータ可する方法
-
scriptコマンドでログファイル...
-
unixのdiffコマンドの動作について
-
Linuxで*をつかってファイル移...
-
windows7でmingwのgrepで漢字の...
-
【Linux】findコマンドの表示順
-
cshでfindした一覧をタイムスタ...
-
○行目から□行目だけを表示する...
-
UNIXで、ディレクトリを比較し...
-
Linux上で固定長ファイルのレイ...
-
euctosj を使用してファイル名...
-
ショートカットのリンク先(フ...
おすすめ情報