スペースを含むファイル/ディレクトリに関する情報のリスト

スペースを含むファイル/ディレクトリに関する情報のリスト

ファイルとディレクトリに関する情報を取得するためにlsを使用しようとしています。ファイル/ディレクトリに空白があるたびに、現在のコマンドが名前を正しく取得できません。

これは、ディレクトリ内のすべてのファイル/ディレクトリを一覧表示するために使用します。

ls -al --time-style=+%s . | awk '{if ($7 != ".." && $7 != "." && $1 != "total") print $1"\t"$3"\t"$5"\t"$6"\t"$7}'

私のパスワードに「no-spaces-dir」、「some dir」、「some other dir」の3つのディレクトリがあると仮定すると、次のような結果が出力されます。

drwxr-xr-x.     testuser    4096    1349853378      no-space-dir
drwxr-xr-x.     testuser    4096    1349853387      some
drwxr-xr-x.     testuser    4096    1349853359      two

私のawk部分に問題があると言いたいです。それから7ドルしなければならない明らかに $8 と $9 を追加することで、私が設定した例に対して必要な出力を得ることができますが、ディレクトリに空白が 1~2 つしかないことは必ずしもわかりません。

他の情報(ファイル/ディレクトリ権限、ユーザー、スペース、タイムスタンプ)を保存し、コマンド出力からフルネームを取得するにはどうすればよいですか?

ベストアンサー1

問題は、awkがスペースをフィールド区切り文字として使用して入力を解析することです。フィールドにスペースが含まれると、問題が発生する可能性があります。

ls"dotglob" bashシェルオプションを使用して、解析された出力のstat(1)代わりに必要なものを取得できます。

shopt -s dotglob  # Enable * to match files starting with a dot
stat -c $'%A\t%U\t%s\t%Y\t%n' *

書式文字列は、目的の書式で目的のフィールドを出力します。 $ '...'を使用すると、\ tをタブに展開できます。必要に応じて、実際のタブ文字を挿入して先行$を削除できます。

dotglobの詳細については、bash(1)マニュアルページを読んでGLOBIGNOREに従ってください。stat(1)フォーマット文字列に何を入れることができるかについては、マニュアルページを読んでください。

おすすめ記事