2017-05-15 4 views
0

これはStackOverflowの私の最初の投稿ですので、優しくしてください。ループの中でfindの出力を並べ替える

私がしようとしているのは、サイズの検索結果を並べ替えることです(最大から最小)。

file1 
file2 
file3 
file4 
file5 
file6 

私のコードは次のようになります:

for x in $(cat file.txt) 
do 
find -name $x -printf '%s %p\n'| sort -rn 
done 

しかし、その代わりに、出力がソートされていない

は私が含まれていfile.txtとを持っています。

出力はファイルのパス(偉大です)とサイズは、ファイルと同じ順序です。

例えば:find

128 /dir1/file1 
8 /dir2/file2 
0 file3 
4 file4 
... 
and so on 
+0

あなたのループは、テキストファイルの各行に取り組んでいます。したがって、 'sort' 1ファイルをテキストファイルの順に毎回渡しています。申し訳ありませんが、それを修正する方法を提案することはできませんが、何が起こっているかを理解するのに役立ちます。私は配列が助けになると思います。http://stackoverflow.com/questions/10981439/reading-filenames-into-an-array – JeffUK

答えて

0

あなたの呼び出しは、あなたがsortに送信され、各ファイルのための単一の行を出力します。 sortは、呼び出すたびに1行しか取得できないため、ソートするものは何もなく、ファイルはfile.txtにリストされている順に出力されます。

代わりに、パイプsortにループ全体の出力は:

for x in $(cat file.txt) 
do 
find -name $x -printf '%s %p\n' 
done| sort -rn 
+0

ありがとうございます。あなたはとても役に立ちました:) – Alexander

関連する問題