Как получить имя диска, содержащего определенный раздел

Принятие Вас имеет GNU (find, xargs, & mv), измените свою команду на это:

$ find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir

выборка от mv страница справочника

   -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY

Вышеупомянутое xargs ... создаст команду так, чтобы вызовы для перемещения были похожи на это:

 $ mv 1.csv 2.csv 3.csv ... -t some_dir

Не нужен xargs

Можно пропустить этот подход, просто имея find сделайте всю работу саму:

$ find /foot/bar/ -name '*.csv' -exec mv -t some_dir {} +

Почему Вам нужно mv -t ...?

Это имеет отношение к пути который xargs создает набор файлов для передачи команде, которую он собирается выполнить каждый раз, (т.е. mv ...).

Когда Вы работаете mv управляйте вручную собой, Вы управляете, сколько имен файлов передается ему и таким образом, Вы не должны волноваться о необходимости -t my_dir так как Вы всегда будете помещать целевой каталог в последний раз.

Ссылки

5
15.10.2015, 02:32
3 ответа

Вы можете посмотреть в /sys блочное устройство для заданного имени раздела. Например, /dev/sda1:

$ ls -l /sys/class/block/sda1
lrwxrwxrwx 1 root root /sys/class/block/sda1 -> \
 ../../devices/pci0000:00/.../ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1

Скрипт, принимающий arg /dev/sda1 и печатающий /dev/sda, выглядит так:

part=$1
part=${part#/dev/}
disk=$(readlink /sys/class/block/$part)
disk=${disk%/*}
disk=/dev/${disk##*/}
echo $disk

У меня нет lvm и т.д., чтобы попробовать, но, вероятно, есть какой-то похожий путь.


Есть также lsblk:

$ lsblk -as /dev/sde1
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sde1    8:65   1  7.4G  0 part 
`-sde   8:64   1  7.4G  0 disk 

и, как сказал @don_crissti, вы можете получить родителя напрямую с помощью:

lsblk -no pkname /dev/sda1
8
27.01.2020, 20:36

Я думаю, что, возможно, избегать Alt + Tab - хорошая идея. Корица имеет горячие углы - у меня есть мои углы настроены, чтобы представить мои окна в виде сетки значков (Показать все окна), который как 'Scale Windows' в Compiz, что позволяет мне прямо нажать на окно я хочу следующий.

Для ковбоя с клавиатурой (как вы предпочитаете ALT + TAB я полагаю, это вы...) Я бы рекомендовал CTRL + ALT + UP и CTRL + ALT + DOWN - масштабировать окна, и то же самое, но с рабочими пространствами (Показать все рабочие области также масштабировать все окна в каждом рабочем пространстве).

Если используется только одно рабочее пространство, можно удалить все остальные и просто использовать клавиши CTRL + ALT + DOWN.

Используя приложение «Клавиатура», вы можете легко сбросить этот ярлык - CTRL + ~ должны сделать хитрость, всего одну клавишу вверх от вкладки.

Этот ответ работает на меня, так как я понятия не имею, как установить правила окна в корице - он не доступен через общие инструменты. Он работает на конки (пропуск пейджера), но оконный менеджер немного более тесно связан в пользу стабильности, чем Compiz.

-121--42249-

В /sys можно просмотреть устройство блокировки для заданного имени раздела. Например ,/dev/sda1:

$ ls -l /sys/class/block/sda1
lrwxrwxrwx 1 root root /sys/class/block/sda1 -> \
 ../../devices/pci0000:00/.../ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1

Сценарий для получения arg /dev/sda1 и печати /dev/sda :

part=$1
part=${part#/dev/}
disk=$(readlink /sys/class/block/$part)
disk=${disk%/*}
disk=/dev/${disk##*/}
echo $disk

У меня нет lvm и т.д., чтобы попробовать, но, вероятно, есть какой-то похожий путь.


Существует также lsblk :

$ lsblk -as /dev/sde1
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sde1    8:65   1  7.4G  0 part 
`-sde   8:64   1  7.4G  0 disk 

и как @ don _ crissti сказал, что вы можете получить родителя непосредственно с:

lsblk -no pkname /dev/sda1
-121--70663-

Возможно, не красиво:

for d in `fdisk -l 2>/dev/null | grep "^Disk " | cut -d":" -f1 | cut -f2`
do
  if [ `fdisk -l $d 2>/dev/null | grep -c "/dev/sda1"` -gt 0 ]
  then
    echo On disk $d
  fi
done

Это работает только для «реальных» дисков, а не для LVM.

0
27.01.2020, 20:36

Работает только с локалью UTF -8. lvm, zfs, рейд проверены нормально.

parent_tree_disk() {
  lsblk | awk '/^[A-Za-z]/{d0=$1; print d0};/^[└─├─]/{d1=$1; print d0, d1};/^  [└─├─]/{d2=$1; print d0, d1, d2}' | sed 's/[├─└─]//g'
}

alias pd='parent_tree_disk'

команда оболочки:#pd
ИМЯ
сда
сда сда1
сда сда2
sda sda2 cl -корень
sda sda2 кл -подкачка

команда оболочки:#pd | awk '/sda2/{print $1}'
сда

И вы можете использовать другие фильтры для вывода списка pd, такие как sort, uniq...

1
27.01.2020, 20:36

Теги

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