ls -al
以下はコマンドの出力です。
total 280K
drwxrwxr-x 2 enan enan 4.0K Jun 28 09:59 ranger/
drwxrwxr-x 2 enan enan 4.0K Jun 8 23:26 scripts/
-rw-rw-r-- 1 enan enan 49 Jun 4 18:19 caps_to_ctrl.sh
-rw-rw-r-- 1 enan enan 739 Jun 4 18:19 cmus.theme
-rw-rw-r-- 1 enan enan 8.6K Jun 4 18:19 compton.conf
-rw-rw-r-- 1 enan enan 5.9K Jun 22 09:39 config
-rw-rw-r-- 1 enan enan 859 Jun 14 12:13 i3blocks.conf
-rw-rw-r-- 1 enan enan 4.7K Jun 14 12:13 init.el
-rw-rw-r-- 1 enan enan 8.7K Jun 28 11:22 init.vim
-rw-rw-r-- 1 enan enan 815 Jun 14 12:13 install.sh
-rwxrwxr-x 1 enan enan 142 Jun 4 18:19 lock.sh*
-rw-rw-r-- 1 enan enan 1.1K Jun 21 13:30 README.md
-rw-rw-r-- 1 enan enan 197K Jun 14 12:13 screenshot.png
-rw-rw-r-- 1 enan enan 1.2K Jun 20 21:51 Session.vim
-rw-rw-r-- 1 enan enan 427 Jun 9 13:46 tmux.sh
-rw-rw-r--
ファイル権限とファイル所有者の間に数字があることがわかりますenan
。この番号はファイルへのハードリンクの数です。場合によっては、それを出力に表示するのが便利かもしれませんが、今は必要ではなく、時々注意が気を散らします。ls -al
今は不要なので、出力から最後の変更日を削除する方法があることがわかります。
それでは、ls -al
コマンド出力からハードリンク数をどのように削除できますか?コマンド出力にハードリンクの数と最後の変更日を表示するのはなぜ重要ですか?私は、あなたがこの情報を使用している人がいる場合は、その理由と方法を教えてください。なぜなら、私が使うべき動作を誤ってあいまいにしたくないからです。
答え1
2列目のリンクを見たくない場合は、パイプls -al
で接続してくださいawk
。
ls -al | awk '{$2=""; print $0}'
これにより、標準の区切り文字(この場合はスペース)を使用して、2番目の列を除くすべての列が印刷されます。
私の環境では、最後の変更日の列は6、7、8であり、スペースを区切り文字として使用してその列と2番目の列を削除できます。
ls -la | awk '{$2=$6=$7=$8=""; print $0}'
特定の列が必要ない場合や表示したい場合は、上記の構文をモデルとして使用して目的の列を削除できます。何も痛くないでしょう。すべての列を見て何も見逃したくない場合は、次の基準を使用してください。
ls -al
エイリアスが必要な場合は、~/.bashrc に以下を追加します。
la() {
ls -la | awk '{$2=$6=$7=$8=""; print $0}'
}
この関数は、一重引用符と二重引用符を考慮したりエスケープしたりすることなく、同じように機能します。la
asを使用すると、ll
構文エラーが発生します。なぜなら、私の環境ではすでにエイリアスだからです。
答え2
ls -l
残りの行はそのまま維持しながら、出力からハードリンク数を削除するには、次の手順を実行します。
ls -l | sed -E '2,$s/ +[0-9]+//'
置換は、sed
最初の行の後の各行の最初の数値セットとその前のすべてのスペース(最初の行を含むtotal
)を削除します。
関数として
myls () {
command ls -l "$@" | sed -E '2,$s/ +[0-9]+//'
}
この関数は、結果を送信する前にls -l
ユーザーが関数に提供する追加のコマンドライン引数を使用して呼び出されますsed
。
を使用すると、command ls
後で関数名を変更することにした場合に、ls
関数が自分自身を再帰的に呼び出さないようにすることができます。
例:
$ ls -la ~/.skel
total 18
drwxr-xr-x 2 kk wheel 512 May 4 16:29 .
drwxr-xr-x 3 kk wheel 512 Jun 28 08:15 ..
-rw-r--r-- 1 kk wheel 87 Nov 1 2017 .Xdefaults
-rw-r--r-- 1 kk wheel 771 Feb 9 10:18 .cshrc
-rw-r--r-- 1 kk wheel 101 Nov 1 2017 .cvsrc
-rw-r--r-- 1 kk wheel 359 Nov 1 2017 .login
-rw-r--r-- 1 kk wheel 175 Nov 1 2017 .mailrc
-rw-r--r-- 1 kk wheel 229 May 4 16:29 .profile
-rw-r--r-- 1 kk wheel 108 Apr 15 12:50 .vimrc
-rw-r--r-- 1 kk wheel 0 Apr 21 17:44 .zshrc
$ myls -a ~/.skel
total
drwxr-xr-x kk wheel 512 May 4 16:29 .
drwxr-xr-x kk wheel 512 Jun 28 08:15 ..
-rw-r--r-- kk wheel 87 Nov 1 2017 .Xdefaults
-rw-r--r-- kk wheel 771 Feb 9 10:18 .cshrc
-rw-r--r-- kk wheel 101 Nov 1 2017 .cvsrc
-rw-r--r-- kk wheel 359 Nov 1 2017 .login
-rw-r--r-- kk wheel 175 Nov 1 2017 .mailrc
-rw-r--r-- kk wheel 229 May 4 16:29 .profile
-rw-r--r-- kk wheel 108 Apr 15 12:50 .vimrc
-rw-r--r-- kk wheel 0 Apr 21 17:44 .zshrc
アクション関数の変形正確にls
以下を使用しない限り、次のようになりますls -l
。
ls () (
add_filter=0
while getopts ':l' opt; do
case $opt in
l) add_filter=1 ;;
1) add_filter=0
esac
done
command ls "$@" |
if [ "$add_filter" -eq 1 ]; then
sed -E '2,$s/ +[0-9]+//'
else
cat
fi
)
-l
この関数は、オプションが使用されたかどうかを検出するために独自のコマンドライン解析を実行します(後でオプションを使用して無効にすることはできません)。もしそうなら、私たちはフラグを設定します。後でフラグが設定されると、フィルタリングされた-1
出力が渡されます。フラグが設定されていない場合は、出力をそのまま渡します。ls
sed
cat
答え3
ast-open(ksh93が含まれていて前にある場合は組み込み関数でもありますls
)を使用すると、出力形式を完全に指定してリンク数を省略できます()。ls
/opt/ast/bin
/bin
$PATH
%3(nlink)u
ls -rSZ '%(mode)s %-8(uid)s %-8(gid)s %8(device:case::%(size)u:*:%(device)s)s %(atime)s %(name)s%(linkop:case:?*: %(linkop)s %(linkpath)s)s'