Перемещение файлов вверх по каталогу по критерию глубины

Я не совсем уверен, что Ваше предположение корректно. Я регулярно использую устройства запараллеленной сети и его мой опыт, что сетевой трафик для одного из VMs несколько изолируется. Я использую KVM, но образующая мост технология, которую я использую, - то, что предлагается хостом Linux, таким образом, я предположил бы, что они, возможно, не идентичны, но подобны.

Также Ваше использование arp смущает меня. Та команда просто показывает, с какими системами недавно связалась система, и они - MAC-адрес к отображениям IP-адреса, сохраняются в системном кэше ARP. Команда arp отображает содержание этого кэша.

Пример

У меня есть хост VM + 1 гость.

хост

$ arp -a
hostX (192.168.1.226) at XX:XX:XX:XX:XX:XX [ether] on br0
hostY (192.168.1.7) at XX:XX:XX:XX:XX:XX [ether] on br0
hostZ (192.168.1.5) at XX:XX:XX:XX:XX:XX [ether] on br0
hostA (192.168.1.1) at XX:XX:XX:XX:XX:XX [ether] on br0

гость

$ arp -a
hostA (192.168.1.1) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostY (192.168.1.7) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostB (192.168.1.100) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostC (192.168.1.8) at XX:XX:XX:XX:XX:XX [ether] on eth0
hostX (192.168.1.226) at XX:XX:XX:XX:XX:XX [ether] on eth0

Мосты являются устройствами Уровня 2, таким образом, я не ожидал бы видеть любое доказательство arp данные по хосту VM, от гостя VM.

выборка - 9.2.5. Сетевой мост - документы Redhat

Сетевой мост является устройством Канального уровня, которое передает трафик между сетями на основе MAC-адресов и поэтому также упоминается как устройство Уровня 2. Это делает решения по передаче на основе таблиц MAC-адресов, которые это создает путем изучения того, какие хосты подключены к каждой сети. Программный мост может использоваться в хосте Linux для эмуляции аппаратного моста, например, в приложениях виртуализации для совместного использования NIC с одним или несколькими виртуальными NICs.

Отладка этого далее?

Я был бы сотрудник сетевой аналитический инструмент tcpdump на обоих гость и хост VMs. Это, вероятно, покажет Вам, где узкое место.

$ sudo tcpdump -i eth0

Измените аргумент -i для которого когда-либо сетевой интерфейс требуется контролировать.

2
28.10.2015, 00:10
3 ответа

Исходя из структуры каталогов:

$ tree
.
├── a
│   └── b
│       └── a.h5
├── b
│   ├── b
│   │   └── e.h5
│   └── c
│       ├── a.h5
│       └── b.h5
├── c
│   └── b
│       └── a.h5
├── d
│   ├── a.h5
│   └── e.h5
└── e
    └── e.h5

12 directories, 8 files

Используйте этот для цикла :

$ for f in */*/*.h5; do mv -v -- "$f" "${f%/*}/../"; done
»a/b/a.h5“ -> »a/b/../a.h5“
»b/b/e.h5“ -> »b/b/../e.h5“
»b/c/a.h5“ -> »b/c/../a.h5“
»b/c/b.h5“ -> »b/c/../b.h5“
»c/b/a.h5“ -> »c/b/../a.h5“

Результат :

$ tree
.
├── a
│   ├── a.h5
│   └── b
├── b
│   ├── a.h5
│   ├── b
│   ├── b.h5
│   ├── c
│   └── e.h5
├── c
│   ├── a.h5
│   └── b
├── d
│   ├── a.h5
│   └── e.h5
└── e
    └── e.h5

12 directories, 8 files

Объяснение :

for f in */*/*.h5; do mv -v -- "$f" "${f%/*}/../"; done
  • для f в * /*/*.h5 перебирает все нужные файлы
    • mv -v - подробно перемещает их. - предотвращает интерпретацию имен файлов с дефисами в качестве аргументов.
    • «$ f» исходное имя файла
    • $ {f% / *} /../ имя каталога, содержащего файл, ../ добавлено. Этот путь интерпретируется как «на один каталог вверх».
3
27.01.2020, 21:52

Это должно быть начало:

find . -mindepth 3 -maxdepth 3 -type f -execdir mv -i -v {} .. \;

mv -i просит перезаписать существующие файлы. -execdir изменяет каталог файла перед выполнением команды.

3
27.01.2020, 21:52

попробуйте

 for x in */*/*.h5
 do
    mv "$x" "$(dirname $(dirname $x))"
 done

, если в именах каталогов нет странных символов.

Или, альтернативно:

ls */*/*.h5 | awk -F/ '{print "mv \"%s\"  \"%s/%s\" \n",$0,$1,$3 ;}' | bash

вы можете удалить | bash , чтобы получить предварительный просмотр.

1
27.01.2020, 21:52

Теги

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