duコマンド+アルファで大きなファイルを検索
- duコマンドとアルファを使用して、ディスク内の大きなファイルを検索する方法について教えてください。
- ディレクトリも検索されてしまうため、ファイルかどうか判断する必要があります。
- ファイルを出力せずにディスク内の大きなファイルだけを検索する方法を教えてください。
- ベストアンサー
duコマンド+アルファで大きなファイルを検索
以下のコマンドでディスク内の大きなファイルを検索することはできるのですが、ディレクトリも検索されてしまう為、ファイルかどうか判断するのは自分で見なければなりません。 --------------------------------------------------------------- du -a `ls -la /| egrep -wv "backup|^l[rwx-]+|skel|\.|\.\.|^total|proc" | awk '{print $NF}'` | sort -nr | head -30 出力された内容がディレクトリなら偽として、大きなファイルだけをしりたいのです。 一度ファイルに出力してからwhileを使って一行ずつifコマンドでディレクトリなら偽として出力していけばできるのですが。 ------------------------------------------------------------------ while read line ;do if [ -f "$line" ] ; then echo "$line" ; fi ; done < list これと同じ結果をファイルを作成せずにやりたいのです。 while分の最後のdoneにファイルをリダイレクトさせる要領で while read line ;do if [ -f "$line" ] ; then echo "$line" ; fi ; done < `printf "$list\n"` としてもうまくゆきません。 どうしたらファイルを作成せずにディスク内の大きなファイルだけを検索する事ができますでしょうか。
- LINUX-man
- お礼率56% (14/25)
- Linux系OS
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
リダイレクトできるならパイプも使えるんだけどね. printf の出力を読み込ませたいなら printf "$list\n" | while read line ;do if [ -f "$line" ] ; then echo "$line" ; fi ; done でできる. もうちょっというと printf "$list\n" | while read line ;do test -f "$line" && echo "$line" ; fi ; done くらい? もちろんこんな用途に du を使うのはどうかと思いますが.
その他の回答 (1)
- foobar
- ベストアンサー率44% (1423/3185)
findを使って、 find . -size +100M -type f -print のような形で検索されるのは如何でしょうか。
お礼
ご協力ありがとうごございます。 ファイルサイズもピンからキリなのでサイズ指定なしで 大きいファイルを探したいと思います。
関連するQ&A
- シェルスクリプト shiftとwhile
下記の内容はスクリプトの一部を抜粋した内容です。 2箇所、理解が出来ない部分があるので、教えて頂けますでしょうか。 ------------------------------------------------ shift $(( $OPTIND -1)) if [ $# -eq 0 ]; then FileName="" elif [ $# -eq 1 ]; then if [ "\-" = "$1" ]; then FileName="" else FileName="$1" fi else echo "オプションが多い" exit fi if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done else while read line; do fcnctionA "$line" done < "$FileName" fi ------------------------------------------------ (1) if [ "\-" = "$1" ]; then 部分が理解できないのですが、教えて頂けますでしょうか。 (2) if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done 基本はファイル名を指定して実行する事を前提としていると思います。 ファイル名を指定しないでスクリプトの実行をする場合は、1行ずつ標準入力で 入力すると思うのですが、このような使い方をする場合はあるのでしょうか。 下記よりも便利な点があるようでしたら、教えて頂けますでしょうか。 または、shiftと関係があるのでしょうか? if [ ! "" = "$FileName" ]; then while read line; do fcnctionA "$line" done < "$FileName" fi
- ベストアンサー
- その他(インターネット・Webサービス)
- メニュー画面よりコマンド実行して結果表示する
シェルスクリプトでメニュー選択画面より選択してコマンドを実行して結果を表示する。 エンターキーを押して再度メニューに戻る。 そういうスクリプト作成したいのですがうまくいきません。 下記では何が誤っていて不足しているのでしょうか? 正しい構文を教えて下さい。 ・・・誤りばかりと思いますがすいません。 #!/bin/bash PS3="メニューを選択して下さい。" select ans in "$ans1" "$ans2" "$ans3" "終了!"; do $ans1="ifconfig" $ans2="df " $ans3="netstat " if [ -z "$ans1" ]; then echo " $ans1." read ifconfig clear; while :; do echo -n "^[[1;1H"; ifconfig ; sleep 1; done if [ -z "$ans2" ]; then echo " $ans2." read df clear; while :; do echo -n "^[[1;1H"; df ; sleep 1; done if [ -z "$ans3" ]; then echo " $ans3." read netstat clear; while :; do echo -n "^[[1;1H"; netstat ; sleep 1; done else break fi case "$ans" in "終了!") break;; "") echo "終了";; *) esac done echo "Good bye."
- 締切済み
- Linux系OS
- (UNIX)後ろのスペース出力について
UNIXのコマンドで、catで読み込んだ行をwhile文でファイルに出力しているのですが、その際に後ろのスペースを消さずに出力するにはどうすれば良いのでしょうか? 以下のような処理を行っています。 cat $infile | read LINE do echo "$LINE" >> $outfile done <$infileの内容> 1 10 100□□□□□□ 2 20 200□□□□□□ ・・・ 以上となります。よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- Perlについて
あるテキストファイルからディレクトリだけを抜き出して各ディレクトリにパーミッションをつけたいのですがやりかたはシェルスクリプトでやろうとかんがえています。 #!/usr/bin/bash while read x1 x2 x3 x4 x5 x6 x7 x8 x9 ; do echo $x1 | grep ^d > /dev/null 2>&1 if(($?==0));then echo mkdir -p $x9 fi done < file.txt とディレクトリを作るところからパーミッションはどう書けばわかりません。当方初心者なのでわからないことがおおいです。 ご教授お願いします。 ~
- 締切済み
- Perl
- シェルスクリプト
2月14日頃質問のあった”UNIXのシェルスクリプトを使用してテキストファイルのある列にある特定の文字列を条件としてその行を出力するということをやりたい”を下記のように作ってみました。問題ないか逆質問の形で投稿します。(ルール違反かもしれませんが質問が締め切られているので・・・) #!/bin/bash CAT=YAHOO while read LINE do echo $LINE > tmp.txt DOG=`cut -d" " -f2 tmp.txt` if [ "$CAT" = "$DOG" ] then echo "$LINE" fi done < catalog.file
- ベストアンサー
- その他([技術者向] コンピューター)
- 【シェル】whileコマンドについて
【シェル】whileコマンドについて OS:Solaris10 SH:Bシェル お世話になります。 whileコマンドにてテキストから、先頭に"#"(シャープ)が付いている行と、 空白行以外を読み込ませたいです。 ところが、メイン処理にawkコマンドを入れると、テキストを読む時点で、 行全体ではなく、指定したフィールド内の文字列を読みにいくため、 "#"(シャープ)が付いている行を無視することができません。 ====== while.sh ====== #!/bin/sh while read LINE do echo $LINE | awk '{print $2}' done < list.txt | grep -v "^#" | grep -v "^$" ====================== ------ list.txt ------ 1 2 3 #4 5 6 7 8 9 ---------------------- ****** 出力結果 ****** 2 5 8 ********************** ** 出力させたい結果 ** 2 8 ********************** whileコマンドのオプション等で、テキスト内に特定の記号がある行は 無視して読み込ませる方法がありましたら、ご教授ください。 宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- Kシェルのreadコマンドについての質問。
Kシェルのreadコマンドについての質問。 簡単なサンプルですが、以下のように動作させたいのですが、 readコマンドが無視(動作しない)されております。 while read line do echo $line read ans <--- 実行しても入力を求められない状況です。 echo $ans done < ./xxx 何かご存知でしたら、ご教授下さい。 宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- While 二重ループ処理について
Bashのシェルスクリプトでwhileを使いループの処理を行いたい。 現状以下のようにファイルAの中に値”1”とイコールの場合に$awkを表示しています。 これを値”1”部分へファイルBの中の値を順にチェックできるようにしたいのです。 while IFS="$LF" read $READ_R record; do IFS='; ' set -- $record for awk in $3; do if [ "$awk" == "1" ]; then for awk in $4; do echo "$awk" done fi done done < "$1" 初心者のため分かり難い質問かもしれませんがよろしくお願いします。
- 締切済み
- Linux系OS
- シェルスクリプトでファイルの読みとり
/etc/ldap.confからpam_passwordで始まる行を見つけてその行を書き換えて上書きする関数を作ろうとしているところです。 以下のようにしましたがデバッグのためのechoでの出力が見えませんでした。 echoで1行ずつ列挙されるのを確認したいのですがどうしたらよいですか? function func1 { while read LINE ; do echo $LINE done < $1 return "" } buf=`func /etc/ldap.conf`
- 締切済み
- Linux系OS
- 【シェル】ループの中で対話処理をしたい
unix上でシェルを書いています。 ループ内で対話形式で処理をしたいのですが、入力待ちとならないままループしてしまいます。 ループの中で、キーボードからの入力があるまで処理を待たせることは可能でしょうか。 test.txtの内容*** 花子 太郎 二郎 三郎 *************** このテキストを読み込んで年齢を入力してもらうという処理です。 読んだ後の処理はここでは省略します。 while read line; do echo $line "この人の年齢を入力して下さい。" read ymd if [ "$ymd" = "" ]; then echo "未入力です!" exit 0 fi done < test.txt これを実行すると、入力をまたずに未入力、未入力、未入力…と標準出力されます。 1行読んだら、年齢を聞いて、入力があるまでは"read ymd"の処理を行わない、という ようにする方法をどうかご教授願います。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございます! 前者でできました!!