ディレクトリから特定の.debファイルを検索して、そのディレクトリで利用可能な.debファイルの番号付きリストをインストールして出力するスクリプトを作成しようとしています。
前任者。 "install.deb"を含むすべてのファイル名をルートフォルダから検索してリストに出力します。 ex. 1. newinstall.deb 2. oldinstall.deb 3. install.deb など
答え1
find
.deb
名前がand awk
(mawk
またはgawk
少なくともUbuntuシステムで見つかった実装)で終わる一般的なファイルを見つけるために使用でき、awk
番号付けおよび書式設定に使用できます。sort
ソートされたリストを取得するために呼び出すことができます。ファイルパスと同様に、NULで区切られたレコードを交換形式で使用します。改行文字はファイルパスのすべての文字と同じであるため、-print0
(-z
GNU拡張子)と以下を使用してください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
-
!
(