Сортировка файлов по сходству имен файлов

Предполагая, что вы действительно хотите видеть физические устройства, а не только все блочные устройства:

Тогда моя рекомендация будет:

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.

0
04.03.2020, 12:30
1 ответ

Попробуйте это:

# 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
0
28.04.2021, 23:21

Теги

Похожие вопросы