「.mp4」拡張子で終わる特定のディレクトリ内のファイルの総数をカウントします。
私は次のコマンドを取得しています:
ls -F |grep -v / | wc -l
特定のディレクトリ内のすべてのファイルをカウントしますが、拡張子が.mp4のファイルのカウントが必要です。
そのためのUbuntuコマンドはありますか?
「.mp4」拡張子で終わる特定のディレクトリ内のファイルの総数をカウントします。
私は次のコマンドを取得しています:
ls -F |grep -v / | wc -l
特定のディレクトリ内のすべてのファイルをカウントしますが、拡張子が.mp4のファイルのカウントが必要です。
そのためのUbuntuコマンドはありますか?
回答:
ここでは、この方法で行うことができます
ls -lR /path/to/dir/*.jpg | wc -l
これはあなたにカウントを与えます
-R?statファイル名だけが必要なときにフルを実行するのはなぜですか?どうしてls -1 *.jpg| wc -l?(OK、改行を含むファイル名がある場合は機能しません。その場合、あなたはそれに値します;-) ...)
.jpg
*.jpgによってではなくシェルによって展開されるためls)、および名前がハイフンで始まるファイルがある場合にも失敗します。
残念ながら、この良性の問題は、すべてのファイル名をサポートし、移植可能な方法で解決するのは困難です。これは安全です(隠しファイル、スペースを含むパス、ダッシュ、さらには改行も処理します)およびPOSIX互換です:
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
再帰的にしたくない場合は、単に追加し-maxdepth 1ます。
テスト:
$ cd -- "$(mktemp -d)"
$ touch -- -foo.mp4 .bar.mp4 .bat.mp4 'baz.mp4
> ban.mp4'
$ find . -mindepth 1 -type f -name "*.mp4" -exec printf x \; | wc -c
4
$ ls -lR ./*.mp4 | wc -l
3
または他の提案:
$ find . -name "*.mp4" | wc -l
5
$ ls -1 *.mp4 | wc -l
ls: invalid option -- '.'
Try 'ls --help' for more information.
0
$ find . -name "*.mp4" | wc -c # Answer fixed at a later time
51
$ find . -name "*.mp4" | wc -l
5
$ find . | grep -i ".mp4$" | wc -l
5
$ ls . | grep ".mp4$" | wc -l
3
-printf x代わりに使用できます-exec printf x \;。それは次のようになりますfind /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c する必要はありません-exec外部のprintf多くのファイルがあることでしょうがある場合、コマンド、非常に遅いが、ためfindに持っているフォーク(2)その後、自身のコピーをオフと(2)はexecve /usr/bin/printf。で-exec printf x \;、それは各ファイルに対して一度行わなければなりません。
-printfPOSIXではサポートされてfindいないため、使用しませんでした。
-mindepthありません-maxdepth。
findは含まれていますが含まれ-mindepthて-maxdepthいません-printfので、両方が含まれていることに感謝しています。
これは、すべてのファイルを拡張子ごとに順番に検索、ソート、およびリストします。
find . -type f | sed 's/.*\.//' | sort | uniq -c
| sort -rn最後にa を追加し、おそらく-mindepth 1現在のディレクトリだけを追加します。
head -nて上位nを取得します。
使用できますls -1 *.mp4 | wc -l。
これは.mp4、で終わるすべてのファイルをリストし、各ファイルを新しい行(ls -1 *.mp4)に出力し、出力をパイプしwcて、-lフラグを使用して新しい行の数をカウントします。
*.mp4、シェルによって展開されている、ではないls非常に多く存在する場合、これは失敗します.mp4それらのリストをに渡すことができないというディレクトリ内のファイルls引数として。
--.mp4
--2番目のケースを解決します。前者は、エラーメッセージ(多くのファイルが必要です!)と、ここに別の良い質問が表示されます。コーナーケースですが、気付く価値があります。
これにより、.mp4のファイルのリストが表示されます。
ls /path/to/directory | grep ".mp4$"
と組み合わせると、wc -lカウントが得られます
ls /path/to/directory | grep ".mp4$" | wc -l
検索にサブディレクトリを含める場合
ls -lR /path/to/directory | grep ".mp4$" | wc -l
wc -l
ls /directory/*.mp4と、シェルはglobを展開しls /directory/file1.mp4 /directory/file2.mp4 ...、ディレクトリに引数として渡すことができるmp4ファイルよりも多くのmp4ファイルが含まれている場合、これに失敗しlsます。
bashでは、globを使用した配列を使用するコールドリゾートの1つです。
$ files=( *.mp4 )
$ echo ${#files[@]}
30
Linuxで拡張子別にファイルをカウントする方法を確認しますか?、それは良い答えと説明を与えます、あなたは次のコマンドを使うことができます:
find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
ls -1この場合、改行文字の処理により、ls出力を解析するのが賢明になります。マークされたものは、-Rフラグの使用に誤りがあります。