2009-07-22 4 views
1

Linux上でbashを使用すると、再帰的にマウントされた共有を走査し、各ファイルに対してコマンドを実行し、ファイルの種類とサイズ、アクセス権などを取得して、ファイルに出力する方法はありますか?Samba共有を再帰的にトラバースしますか?

答えて

1

CIFS共有マウントは、Linuxシェルの通常のディレクトリツリーのように見えます。
したがって、必要に応じて検索するコマンドは汎用です。ベースディレクトリから

find . -type f -exec ls -lsrt {} \; > file.txt 

okが、これはあなたのファイルタイプの詳細を与えるものではありません。
各ファイルに-exec file filenameを付けて実行できます。

+0

最初の "。"は開始ディレクトリです - したがって、指定されたコマンドは現在のディレクトリで開始しますが、 "find/path/to/share ... " – caf

+0

@caf、非常に真実。そして、私は彼の他の質問に答えながら話しました。 – nik

0
mount -v | grep smbfs | awk '{print $3}' | xargs ls -lsR 

あなたはファイルにリダイレクトできます。

+0

私はどのようにou各ファイルのfileコマンドのtputも同様ですか? –

0
mount -v | awk '/smbfs/{ 
    cmd="ls -lsR "$3 
    while((cmd | getline d)>0){ 
     print d "->file "$3 
    } 
    close(cmd) 
}' 
+0

ファイルコマンドの出力をどのように各ファイルに含めることができますか? –

+0

"ファイルコマンドの出力"とはどういう意味ですか?あなたの情報のために、実際にはUNIX上で "file"実行可能コマンドがあります。あなたが求めていることを明確にしてください。必要に応じて例を表示 – ghostdog74

+0

申し訳ありませんが、私はlsの出力とファイルを持つことを意味しました。例えば ​​"ls -lsR $ 3; file $ 3"などですが、これを行う方法がわかりません –

0
find $(mount -t smbfs | awk '{print $3}') -mount -type f -ls -execdir file {} \; 
... 
33597911 4 -rw-rw-r-- 2 peter peter   5 Dec 6 00:09 ./test.d\ ir/base 
./base: ASCII text 
    3662 4 -rw-rw-r-- 2 peter peter   4 Dec 6 02:26 ./test.txt... 
./test.txt...: ASCII text 
    3661 0 -rw-rw-r-- 2 peter peter   0 Dec 6 02:45 ./foo.txt 
./foo.txt: empty 
... 

あなたは-execファイル{} +を使用した場合、それは複数の引数で一度ファイルを実行しますが、その後の出力は、findの-ls出力とうまくインターリーブさではないでしょう。 (GNUのfindの-execdir {} +は現在bug workaroundのために、-execdir {} \;と同じように動作します。あなたはfile出力の完全なパスをしたい場合は、それ以上の-ls出力ならびに-exec file {} \;を使用してください。

find -ls出力は全く同じではありませんls -lこれは、inodeに最初の2つのフィールドとして複数のブロックが含まれているためです

関連する問題