「.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 \;
、それは各ファイルに対して一度行わなければなりません。
-printf
POSIXではサポートされて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フラグの使用に誤りがあります。