頑張る画像以外のファイルのみを一覧表示、最新の500個のファイルのみを検索します。だから私は走る
ls -t | head -500 | file | grep -v 'image'
正しくありません。ヘルプメッセージが表示されます。それに変える
ls -t | head -500 | xargs file | grep -v 'image'
これで、目的の出力が表示されることがありますが、ファイル名にスペース(たとえば、など)が含まれている場合にPlutonian\ Nights\ -\ Sun\ Ra.mp3
実行xargs
されますfile Plutonian
。file Nights
スペースを見るのにどのように役立つか、xargs
私が達成したいことを達成できますか?
答え1
を使用すると、xargs
次のことができます。
find . -type f -print0 | xargs -0 file | grep -v 'image'
ところで、xargs
それが昨日でした。今日も素敵な子供たちが使っていますparallel
。並列性を使用すると、次のようになります。
find . -type f | parallel file | grep -v 'image'
望むより。 -print0 と -0 は使用されません。parallel
本当にスマートなものそのものです。
修正する
最新の 500 ファイルのみを一覧表示するには、次のコマンドを使用します。
ls -1t | head -500 | parallel file {} | grep -v image
重要
パラレルプログラムが古く、上記の構文が機能しない場合は、ここの指示に従ってパラレルプログラムの新しいバージョンをインストールしてください。http://www.gnu.org/software/parallel/parallel_tutorial.html
答え2
「find」および「-print0」オプションを使用し、出力を「xargs」および「-0」オプションにパイプします。
私はこの技術を知って使用していますが、@Jensユーザーが同様の質問に答えたのを見ました。ここで詳細を確認できます。
https://stackoverflow.com/questions/16758525/use-xargs-with-filenames-include-whitespaces
答え3
役に立つおおよその2つの提案があります。しかし、どちらもそれほど満足していないので、おそらくより良いものが出てくるかもしれません。
まず、sed を使用してすべての項目に引用符を追加します。したがって、ファイル名に引用符がある場合にのみ問題が発生します。
ls -t | head -500 | sed -e 's/\(.*\)/"\1"/' | xargs file | grep -v 'image'
別の方法は、lsを使用して最新の501を見つけ、findを使用して最新のエントリを取得することです。
find -newer $(ls -t | head -501 | tail -1) -type f -exec file {} \; | grep -v image
答え4
あなたは試すことができます
printf "%s\0" $(ls -t | head -500) | xargs -0 file | grep -v image
これにより、xargsはnullで区切られたファイル名引数を使用します。