Как я ищу все подкаталоги для нахождения один с определенным именем?

Существует несколько способов получить эту информацию. Большинство из них требует, чтобы Вы проанализировали вывод другой команды.

  • Выполненный # fdisk /dev/sdX -l получать общее представление о структуре файловой системы. Вывод - что-то вроде этого:

    Disk /dev/sda: 320.1 GB, 320072933376 bytes, 625142448 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0x9f7685a8
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1              63      289169      144553+  83  Linux
    /dev/sda2          289170   459121634   229416232+  83  Linux
    /dev/sda3       459121635   461129759     1004062+  82  Linux swap / Solaris
    /dev/sda4   *   461129760   625142447    82006344    7  HPFS/NTFS/exFAT
    

    Но это только скажет Вам тип раздела.

  • Вы могли также использовать # blkid получить следующий вывод:

    /dev/sda1: LABEL="boot" UUID="aa84c5a8-6408-4952-b577-578f2a67af86" TYPE="ext2" 
    /dev/sda2: LABEL="root" UUID="a430e0ef-fd35-432f-8b9a-75a49b89ad8a" TYPE="ext4" 
    /dev/sda3: LABEL="swap" UUID="e388806a-dc27-4f4e-a136-3d1ff4e53962" TYPE="swap" 
    /dev/sda4: UUID="088E027A8E026114" TYPE="ntfs" 
    
  • Кроме того, для хорошо отформатированного вывода Вы могли работать # parted /dev/sdX -l для следующего вывода:

    Model: ATA WDC WD3200BEVT-7 (scsi)
    Disk /dev/sda: 320GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags: 
    
    Number  Start   End    Size    Type     File system     Flags
     1      32.3kB  148MB  148MB   primary  ext2
     2      148MB   235GB  235GB   primary  ext4
     3      235GB   236GB  1028MB  primary  linux-swap(v1)
     4      236GB   320GB  84.0GB  primary  ntfs            boot
    
  • $ df -T. Это - другая команда, которая не требует полномочий суперпользователя выполниться. Однако это сообщит для каждой точки монтирования

    Filesystem     Type     1K-blocks     Used Available Use% Mounted on
    rootfs         rootfs   225815276 99381340 114963128  47% /
    dev            devtmpfs   1538396        0   1538396   0% /dev
    run            tmpfs      1541260      416   1540844   1% /run
    /dev/sda2      ext4     225815276 99381340 114963128  47% /
    tmpfs          tmpfs      1541260      360   1540900   1% /dev/shm
    tmpfs          tmpfs      1541260        0   1541260   0% /sys/fs/cgroup
    tmpfs          tmpfs      1541260      900   1540360   1% /tmp
    /dev/sda1      ext2        139985    30386    102372  23% /boot
    /dev/sda4      fuseblk   82006340 79676036   2330304  98% /mnt
    

Другая команда, которая может произойти удобная, # file -sL /dev/sdXY. Это имеет одну оборотную сторону, в которой это не работает с полным блочным устройством. Требует, чтобы точное устройство было передано. Вывод довольно аккуратен хотя:

/dev/sda1: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=aa84c5a8-6408-4952-b577-578f2a67af86, volume name "boot"

Все они будут всегда производиться к stdout. Можно проанализировать их в сценарии при необходимости.

10
13.04.2017, 15:36
3 ответа

Попробовать find /dir -type d -name "your_dir_name".

Замена /dir с Вашим именем каталога и заменой "your_dir_name" с именем Вы ищете.

-type d скажет find искать каталоги только.

15
27.01.2020, 20:01

Для более общего решения нахождения одного или нескольких каталогов и поиска их для чего-то как нахождение старых адресов электронной почты в репозиториях мерзавца смотрят на следующий шаблон:

find . -type d -name .git -print0|\
    xargs -0r -I {} find {} -type f -print0 |\
    xargs -0r grep -e 'my.old@email.address'
1
27.01.2020, 20:01
echo **/target

или получить одно соответствие на строку:

printf %s\\n **/target

Это работает из поля в zsh. В ударе необходимо работать shopt -s globstar во-первых, и остерегайтесь этого, это также пересекает символьные ссылки на каталоги. В ksh93 необходимо работать set -o globstar сначала.

Если Вы хотите соответствовать только каталогам или символьным ссылкам на каталоги, добавьте запаздывание / (т.е. **/target/). В zsh, для соответствия только каталогам, но не символьным ссылкам на каталоги сделайте это **/target(/).

В любой оболочке можно использовать find команда:

find . -name target

На Linux и Cygwin, . является дополнительным. Если Вы хотите соответствовать только каталогам, добавить -type d.

1
27.01.2020, 20:01

Теги

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