2011-01-03 14 views
1

何百ものファイルのリスト(フルパス)をランダムな順序で含むファイルから始めます。そのリストに最新の10個のファイルの詳細を記載したいと思います。bash:ファイル名に空白を含む日付順のファイルをリスト表示する

$ ls -las -t `cat list-of-files.txt` | head -10 

限りファイルのどれもにスペースを持っていないとして、動作しますが、彼らがしなければ、これらのファイルは、スペースで分割し、別々のファイルとして扱われるように失敗します。これは私の素朴な試みです。ファイルの「Hello World」は私を与える:

ls: hello: No such file or directory 
ls: world: No such file or directory 

私は元のリスト・オブ・ファイルのファイル内のファイルを引用しようとしているが、ここでは、文書はまだ治療、ファイル名にスペースでファイルを分割ファイル名の一部として引用符:

$ ls -las -t `awk '{print "\"" $0 "\""}' list-of-files.txt` | head -10 

ls: "hello: No such file or directory 
ls: world": No such file or directory 

私はこれをやって考えることができる唯一の方法は、(おそらくxargsのを使用して)各ファイルを個別にLSすることで、ソート可能で、ファイルのリストと日付で中間ファイルを作成します各行の最初のフィールドとして指定し、その中間ファイルをソートします。しかし、それはちょっと面倒で非効率的です(何百、何百ものlsコマンドではなく、1つまたは2つ)。しかし、それがそれを行う唯一の方法かもしれません?

「ls」に処理するファイルのリストを渡す方法はありますか?それらのファイルには空白が含まれている可能性があります。シンプルにする必要がありますが、私は困惑しています。

+0

はあなたのすべてをありがとう - 私は仕事ここではいくつかの答えを持っている、とマルコのバージョンを使用しています。私はxargsメソッドがいくつかの微調整で動くことができると確信しています、そして私はそれをより長期的に見ていきます。すべての助けが大いに感謝します。 – Jason

答えて

6

を、あなたは別のフィールドセパレータを使用することはbashを強制することができます。

OIFS=$IFS 
IFS=$'\n' 

ls -las -t $(cat list-of-files.txt) | head -10 
IFS=$OIFS 

をしかし、私は考えていませんこのコードはループを実行するより効率的です。さらに、list-of-files.txt内のファイル数が引数の最大数を超えた場合には動作しません。

+0

私の良さ - 私はそれを知らなかった。これは扱います:-)私の既存のコードに変更はありません - 私はリストを行うスクリプトにIFSを設定します。 – Jason

+0

@Jason:それでは、これを受け入れられた答えとマークしてください。私はそれを+1しています。 –

+0

ああ、ダニをクリック;-)答えを受け入れる方法を見ていて、木の木が見えませんでした。 – Jason

1

これがうまくいくかどうかはわかりませんが、\でスペースをエスケープしようとしましたか? sedや何かを使う。例えば、sed "s/ /\\\\ /g" list-of-files.txtである。

+0

スペースはまだ吸い取られているようです:ls:hello \:そのようなファイルやディレクトリはありません\ nls:world:そのようなファイルやディレクトリはありません – Jason

+0

Hmm。まあ、それは試してみる価値があったと思います。マルコの解決策は、行く方法のように思えます、私はそれをupvotingです。 :) – flamingspinach

1

これは私のために働いた:代わりに「一つ以上の空白文字」の

xargs -d\\n ls -last < list-of-files.txt | head -10 
+0

xargsはlsを複数回実行していないので、一度だけ実行しますが、space-containingパラメータをhere-documentよりもうまく通過します。私はxargs(GNU xargsバージョン4.1.20)に "-d"オプションがないようですが、私はこのアプローチを続けます。 – Jason

2

これを試してみてください:

xargs -a list-of-files.txt ls -last | head -n 10 
+0

私のバージョンのxargsには "-a"オプションがありません。私はxargsにソースファイルをパイプしてみましたが、それは私に同じ問題を与えます - ファイル名はスペースで分割されます。 – Jason

関連する問題