Предполагая, что вы действительно хотите видеть физические устройства, а не только все блочные устройства:
Тогда моя рекомендация будет:
lsblk -a -d -e 230
Почему?
Давайте посмотрим, что делают эти параметры командной строки, на справочной странице:
-a, --all
Also list empty devices. (By default they are skipped.)
Как ни странно, lsblk
показывает DVD-рекордер моего ноутбука, даже когда он пуст, без -a
. Но, кажется, ничего не повредит, чтобы оставить его в наличии.
-d, --nodeps
Do not print holder devices or slaves. For example, lsblk
--nodeps /dev/sda prints information about the sda device only.
Это означает, что мы не видим разделов на устройстве, а только само устройство.
-e, --exclude list
Exclude the devices specified by the comma-separated list of
major device numbers. Note that RAM disks (major=1) are
excluded by default. The filter is applied to the top-level
devices only.
Наконец, я использую -e 230
, чтобы исключить zvols ZFS, которые используют этот старший номер. Это полностью логические блочные устройства, но драйвер ZFS заставляет их отображаться в lsblk
так же, как физические дисковые устройства. Если вы используете ZFS, вы можете исключить zvols из отображения с помощью -e 230
.
[root@dalaran ~]# lsblk -a -d -e 230
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 894.3G 0 disk
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 477G 0 disk
Я не рекомендую использовать параметр -S
, так как это приведет к тому, что устройства NVMe не будут отображаться.
На справочной странице lsblk
есть несколько других опций, которые позволяют сделать вывод более машиночитаемым, если вы хотите написать сценарий оболочки. Например, -n
и -o
или -P
.
Попробуйте это:
# Create dir2:
mkdir dir2
# After moving f* to dir1, loop through these files (dir1/f*):
for f in dir1/f*; do
# get the basename, cut off the "f" and put a "t" instead:
t=source-tree/t$(basename "$f" | cut -c 2-)
# If that file exists, move it to dir2
[ -f "$t" ] && mv "$t" dir2
done