Это можно сделать с помощью следующей awk
команды:
nmap -sP 192.168.3.0/24 \
| awk '/192.168.3/ && !/192.168.3.1$/{print $NF}'
Это указывает awk
на печать последнего поля совпадающей строки (s)
Попробуйте это,
find. -maxdepth 1 -type d ! -name '.' | while read -r folder; do
find $folder -type f -name '*.mkv' -exec mv {} $folder \;
find $folder -type d -empty -delete
done
find
получит список всех первичных каталогов. find
переместит доступный файл.mkv в основной каталог. find
удалит все пустые каталоги внутри основного каталога. Примечание :мы также можем переместить 3-й find
из цикла while
, чтобы удалить все пустые каталоги за один раз.
shopt -s globstar nullglob
for dir in./*/; do
for file in "$dir"/**/*.mkv; do
[ ! -f "$file" ] && continue
mv -i "$file" "$dir"
done
done
Приведенный выше двойной цикл решит вашу проблему.
Он делает это путем перебора каталогов в текущем каталоге (, который должен быть каталогом, содержащим все эти каталоги верхнего -уровня ). Для каждого каталога все файлы .mkv
из любого места ниже этого каталога перемещаются в подкаталог. Это делается с помощью глобуса **
в bash
, который рекурсивно сопоставляется с подкаталогами.
Параметр оболочки globstar
включен, чтобы разрешить использование **
, и nullglob
также включен, чтобы циклы вообще не запускались, если нет совпадений заданных шаблонов.
Затем вы можете удалить пустые каталоги с помощью
find. -type d -empty -delete
Попробуйте это,
find. -mindepth 3 -type f -name "*.mkv" -exec sh -c '
f="$1"; IFS=/ && set -- $f; echo mv -t "$2" "$f"
' find-sh {} \;
(Как найти первую подпапку:через)
Удалите echo
при проверке вывода.
Это переместит все файлы *.mkv, которые находятся глубже, чем на 2 уровня в структуре, в первый подкаталог вашего текущего каталога.
Затем вы можете удалить пустые каталоги:
find. -type d -empty -delete