介紹如何在 Linux 中以 ls
與 find
等指令,只顯示目錄、不顯示檔案的各種方法。
在 Linux 的命令列中,若要列出目前工作目錄之下的所有子目錄名稱,有好多種做法,以下是各種方式的使用教學與範例。
ls
指令
以 ls
指令列出目錄是簡單的方式:
# 只列出目錄 ls -d */
NetworkManager/ X11/ acpi/ [略]
或是將 ls
的輸出搭配 grep
篩選出目錄:
# 只列出目錄 ls -F | grep \/$
NetworkManager/ X11/ acpi/ [略]
或是列出詳細的屬性後,搭配 grep
篩選:
# 只列出目錄 ls -l | grep ^d
drwxr-xr-x 3 root root 4096 Jun 26 2019 NetworkManager drwxr-xr-x 6 root root 4096 Feb 16 17:13 X11 drwxr-xr-x 3 root root 4096 Jun 26 2019 acpi [略]
find
指令
find
指令是一個功能強大的 Linux 工具,也可以用來列出目錄:
# 只列出目錄 find . -maxdepth 1 -type d
. ./gtk-3.0 ./netplan ./update-notifier [略]
這裡的 -maxdepth 1
參數是用來限制 find
只列出第一層(也就是目前這一層)的子目錄,若沒有加上這一個參數,就會以遞迴的方式列出所有的子目錄;-type d
是讓 find
僅列出目錄。
其他指令
echo
指令也可以用來列出目錄,只不過它在輸出時會將所有的目錄串成一行:
# 只列出目錄 echo */
NetworkManager/ X11/ acpi/ alternatives/ apm/ apparmor.d/ apparmor/ apport/ apt/ bash_completion.d/ binfmt.d/ byobu/ ca-certificates/ calendar/ cloud/ console-setup/ cron.d/ cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/ cryptsetup-initramfs/ dbus-1/ default/ depmod.d/ dhcp/ dnsmasq.d-available/ dnsmasq.d/ dpkg/ fonts/ glvnd/ groff/ grub.d/ gss/ gtk-2.0/ gtk-3.0/ init.d/ initramfs-tools/ iproute2/ iscsi/ kernel/ landscape/ ld.so.conf.d/ ldap/ libibverbs.d/ libnl-3/ logcheck/ logrotate.d/ lvm/ mdadm/ modprobe.d/ modules-load.d/ netplan/ network/ networkd-dispatcher/ newt/ opt/ pam.d/ perl/ pm/ polkit-1/ pollinate/ profile.d/ python/ python2.7/ python3.6/ python3/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rcS.d/ rsyslog.d/ security/ selinux/ sensors.d/ skel/ ssh/ ssl/ sudoers.d/ sysctl.d/ sysstat/ systemd/ terminfo/ tmpfiles.d/ udev/ ufw/ update-manager/ update-motd.d/ update-notifier/ vim/ vmware-tools/ xdg/ zsh/
printf
指令跟 echo
類似,不過輸出格式可自訂:
# 只列出目錄 printf '%s\n' */
NetworkManager/ X11/ acpi/ [略]