ls -lのファイルとディレクトリのリストを水平に印刷するのではなく、1列にどのように並べ替えることができますか?

ls -lのファイルとディレクトリのリストを水平に印刷するのではなく、1列にどのように並べ替えることができますか?

現在のユーザーのすべてのファイルとディレクトリ名を印刷しようとしていますが、1行は印刷されます。 ls -lを印刷するときと同様に、各ファイルが列として表示されるようにします。

これを助ける必要はありませんが、より良い文脈のために、各ファイル名の後にコロン ":"が表示されることを確認し、最初のフィールドにグループ権限があることを確認しようとしました。たとえば、「file/dir:---」または「file/dir:r--」のように見えます。

echo $(ls -l /home/$(whoami) | awk '{if (NR>1) print $9}'): $(ls -l /home/$(whoami) | awk '{if (NR>1) print $1}')

答え1

ls -1

1行に1つのファイルを一覧表示します。lsこれは、出力が端末以外の場所にリダイレクトされる場合のデフォルトです。

必要な結果を得るには、次のことをお勧めします。

ls -l | awk 'NR > 1 { print $9 ":" $1 }'

またはより良い方法は

stat -c "%n:%A" *

どちらもグループ権限だけでなく、すべての権限もリストします。グループ権限のみを表示するには、以下を使用してください。

ls -l | awk 'NR > 1 { print $9 ":" substr($1,5,3) }'

または

stat -c "%n:%A" * | sed 's/....\(...\)...$/\1/'

(方へユーザー 1404316~のため表現sed方式)。

-parsinglsバリアントはファイル名のスペースやその他のスペース文字を処理しないため、一般的に使用しないでください。

答え2

findGNU拡張機能を含むバージョンにアクセスできる場合は、より簡単な解決策があります。答えを見つけるには実行してman find検索します-printf(これを行うにはまずを押します/^ *-printf)。だとしたら運がいいでしょう。解決策は次のようになる可能性があるためです。

find . -maxdepth 1 -type f -printf "%f: %M\n" | sed 's/....\(...\)...$/\1/'

ボーナスとして、この回答はファイル名にコロン文字が含まれる特別な場合に機能します。

答え3

現在のユーザーにのみファイルが必要な場合。

ls -l | awk -v var="$(whoami)" '$4 == var {print $9}'

これにより、現在のユーザーに属するファイルのみが必要な形式で印刷されます。

関連情報