【Linux】Fedoraで大量のファイル(ディレクトリ含む)を削除しようとしたのですが、rm -rfでは無理なのでググったら「xargs~」ということがわかり、掲載されているコマンドを参考にして試してみたのですがどうしてもうまくいきません。


やりたい事:/var/www/html/ドメイン名/data/*/abc/* を全て消し去りたい。

どなたか無知な私にお知恵をお貸しください。

# ls /var/www/html/ドメイン名/data/*/abc/* | xargs -0 rm -rf
-bash: /bin/ls: Argument list too long(はてな文字数制限のため以下同メッセージ省略)
# ls /var/www/html/ドメイン名/data/*/abc/* > delete.txt | xargs
-bash: /bin/ls: Argu
# ls /var/www/html/ドメイン名/data/*/abc/* | xargs -0 rm -rf
-bash: /bin/ls: Argu
# echo /var/www/html/ドメイン名/data/*/abc/* | xargs -0 rm -rf
xargs: argu
-bash: echo: write error: Broken pipe
# getconf ARG_MAX
131072
# find /var/www/html/ドメイン名/data/*/abc/* -type f -print0 | xargs -0 rm -rf
-bash: /usr/bin/find: Argu
# find /var/www/html/ドメイン名/data/*/abc/* -print0 | xargs -0 rm -rf
-bash: /usr/bin/find: Argu
# jinseiowata(^^)

個人的にCUIなんて大嫌いです・・・。GUIこそが至高さ!鯖管は間違いなくドM。
冗談です。どなたかお力をお貸しください!

回答の条件
  • 1人2回まで
  • 登録:2008/03/26 06:14:14
  • 終了:2008/03/26 09:20:12

ベストアンサー

id:peo3 No.3

peo3回答回数9ベストアンサー獲得回数12008/03/26 07:55:42

ポイント60pt

連投すみません.朝なので寝ぼけてました.

cd /var/www/html/ドメイン名/data/

for dir in * ; do \

rm -fr "${dir}"/abc/* \

done

わざわざcdしなくても良かったです...

# ↑の回答って消せないんでしょうか?

id:qwenty

あなたが神か!素晴らしいです。

今コマンド実行中です。たぶん成功です!

ありがとうございます!

さらっとコード書けるひとは本当にすごい。

#追記

無事に完了できました!

本当にありがとうございます!

2008/03/26 09:19:40

その他の回答(2件)

id:toohigh No.1

toohigh回答回数291ベストアンサー獲得回数372008/03/26 06:30:47

ポイント20pt

xargs を使わない方向での話になりますが、Argu... は、ワイルドカード(つまり *) に該当する全ディレクトリ名・ファイル名を一覧にした結果、引数としてあまりに長い文字列になっている、という内容のエラーになります。


また、rm -rf の場合は、abc を消せば abc の下層にある全ファイルが一緒に消せるので、abc の後ろの /* は要らないような気がします。もちろん abc/ というディレクトリ自体は空のままで消さずにおきたい、ということでしたら abc/* で指定する必要がありますけど・・。


というわけで、こんな感じだといかがでしょうか。

# cd //var/www/html/ドメイン名/data

# rm -rf */abc

id:qwenty

abc/というディレクトリ自体は空のままで残す必要があるのでabc/*。

 -bash-3.1# cd /var/www/html/ドメイン名/data

 -bash-3.1# rm -rf */abc/*

 -bash: /bin/rm: Argument list too long

うぐが・・・。

うがー!駄目でした。

2008/03/26 06:44:57
id:peo3 No.2

peo3回答回数9ベストアンサー獲得回数12008/03/26 07:26:43

ちょっとまどろっこしいですが,

cd /var/www/html/ドメイン名/data/

for dir in * ; do \

cd "$dir" \

rm -fr abc/* \

cd - \

done

とかいかがでしょうか.

/var/www/html/ドメイン名/data/*の数が多すぎなければうまくいくと思います.

# 試すときはいきなりrm -frをせずに,echo rm -frとすることをお薦めします(^^

id:qwenty

コピペして実行してみました。echo rm -rfにしました。

 -bash: cd: ***: No such file or directory

というのがだーっと表示されて終わりました・・・。できなかったようです。

うがー。

2008/03/26 08:40:57
id:peo3 No.3

peo3回答回数9ベストアンサー獲得回数12008/03/26 07:55:42ここでベストアンサー

ポイント60pt

連投すみません.朝なので寝ぼけてました.

cd /var/www/html/ドメイン名/data/

for dir in * ; do \

rm -fr "${dir}"/abc/* \

done

わざわざcdしなくても良かったです...

# ↑の回答って消せないんでしょうか?

id:qwenty

あなたが神か!素晴らしいです。

今コマンド実行中です。たぶん成功です!

ありがとうございます!

さらっとコード書けるひとは本当にすごい。

#追記

無事に完了できました!

本当にありがとうございます!

2008/03/26 09:19:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません