У меня есть структура папок с различной глубиной, похожая на следующую.

parent/location/businessname/sublocation/hotelname
parent/location/businessname/hotelname

Все самые нижние папки - это «Имена отелей», и я пытаюсь найти эти файлы в функции PHP. Кроме того, я пытаюсь собрать все самые нижние папки и их содержимое в одну родительскую папку, как показано ниже.

parent/hotelname

Я на машине с Ubuntu, и я новичок в командной строке, но не совсем в неведении. Любая помощь будет оценена.

1 ответ1

0

Предполагая, что самые конечные папки находятся в бизнес- названии businessname/ или в businessname/sublocation , вы можете сначала начать с вложенных папок, а затем перейти к отелям на том же уровне, что и sublocation/:

$ cd /tmp
$ rm -rf parent
$ mkdir -p parent/location/businessname/sublocation/hotelname1 \
           parent/location/businessname/hotelname2

$ for depth in 2 1; do
    find parent/location/businessname -mindepth $depth -type d -print0 \
      | while read -d '' dir; do
          echo "$dir"
          mv "$dir" parent/ \
            && rmdir --ignore-fail-on-non-empty $(dirname "$dir")
        done
  done

$ find parent/
parent/
parent/hotelname2
parent/hotelname1
parent/location

Это немного странно, так как он пытается несколько раз удалить sublocation/ каталог (для каждой гостиницы, содержащейся в нем), пока он не станет пустым.

Он также не имеет дело с конфликтами имен - он переместит первый отель с заданным именем и оставит другие на месте.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .