文字列に一致するファイルリストの出力

文字列に一致するファイルリストの出力

ディレクトリから特定の.debファイルを検索して、そのディレクトリで利用可能な.debファイルの番号付きリストをインストールして出力するスクリプトを作成しようとしています。

前任者。 "install.deb"を含むすべてのファイル名をルートフォルダから検索してリストに出力します。 ex. 1. newinstall.deb 2. oldinstall.deb 3. install.deb など

答え1

find.deb名前がand awkmawkまたはgawk少なくともUbuntuシステムで見つかった実装)で終わる一般的なファイルを見つけるために使用でき、awk番号付けおよび書式設定に使用できます。sortソートされたリストを取得するために呼び出すことができます。ファイルパスと同様に、NULで区切られたレコードを交換形式で使用します。改行文字はファイルパスのすべての文字と同じであるため、-print0-zGNU拡張子)と以下を使用してくださいRS='\0'

LC_ALL=C find -H "$root_folder" -name '*.deb' -type f -print0 |
  sort -z |
  awk -v RS='\0' '{printf "%3d. %s\n", NR, $0}'

awk代わりに、whichを使用してNULをレコード区切り文字としてサポートしていないシステムperlに移植できます。awk

perl -0lne 'printf "%3d. %s\n", $., $_'

隠し項目を除外するには、-name '.?*' -prune -o後ろに挿入します"$root_folder"。 zsh シェルを使用する場合、もう 1 つの方法はデフォルトのソートを使用し、隠しファイル全体を除外することで、ファイルfind名がロケールで有効なテキストでない場合は表示されません。問題:

n=0
for f ( $root_folder/**/*.deb(N.) ) printf '%3d. %s\n' ++n $f

対照的に、または/...で始まるとfind中断されません。$root_folder-!(

関連情報