コマンドの助けを探しています。大きなファイルディレクトリがあります。私がしたいことはこれらをよりよく分類することです。
たとえば、一意の年を持つファイルとディレクトリの数を確認したいとします。したがって、出力には年の範囲が表示されます。
ls -l
私はリストを通して追加しようとしましたが、grep
それはls -l | grep -c
私にとって魅力的なユニークな日付です。
誰でも助けることができますか?
答え1
以下を試してください。
ls -l --time-style=long-iso | grep -c ' 2017-'
2017を希望の4桁の年に変更してください。この--time-style
オプションを使用すると、lsが印刷されます。ISO 8601デフォルトの短く曖昧な人が読めるコンテンツの代わりにタイムスタンプを使用します。 grepに渡される式は、タイムスタンプで始まる年と一致し、その年に変更されたファイルの行のみを抽出する必要があります(4桁の数字で始まり、ダッシュが続くファイル名がない場合)。
これはGNU実装でしか機能できないことに注意してくださいls
(BusinessBox、FreeBSD、NetBSD、またはMINIX実装では機能しないことを認識しており、Solaris実装では機能しないと確信しています)。
コメントで要求されたように、次の(長くて複雑な)コマンドを使用して、表示された個々の年の数量を取得できます。
ls -l --time-style=long-iso | tail +2 | sed -n 's/ */ /gp' - | cut -d ' ' -f 6 | cut -d '-' -f 1 | sort -u | wc -l
tailコマンドは、合計(無駄)を表示する最初の行を削除します。 sedコマンドは、連続したスペースを単一のスペースに縮小します。最初のcutコマンドは年 - 月 - 日フィールドを抽出し、2番目のコマンドは年だけを抽出し、sortコマンドはそれを各年の1つのインスタンスに減らし、wcコマンドは最終的に数値を出力します。