Рекурсивное сканирование для перемещения всех файлов и удаления пустых каталогов

Я изучаю скрипты bash и хочу переместить все файлы * .ort в новый каталог и удалить каталог после перемещения файла .ort.

Примечание:

  1. Мне не нужно сохранять ту же структуру - я хочу перейти в один каталог, содержащий все файлы .ort
  2. Я могу удалить каталог один раз файл перемещен, так как он содержит только файл .ort и ничего больше

Я думаю, что это сработает, но я хотел подтвердить, прежде чем я просто запустил сценарий bash для каталога.

Синтаксис:

find / -iname "*.ort" -type d -exec /bin/mv {} /home/user123/Desktop/movedfiles/ \;
rmdir **/*/;

Я приветствую все предложения и отзывы об улучшениях или, если это сработает:)

1
задан 11 May 2016 в 18:04

1 ответ

Можно сделать:

find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;
  • find . -type f -name '*.ort' -exec mv -i {} outdir \; переместит единственное .ort файл из исходного каталога для предназначения для каталога (outdir)

  • Второе -exec действие, -exec bash -c 'rmdir "${1%/*}"' _ {} \; будет только работать если предыдущее -exec действие успешно выполняется т.е. .ort файл найден и перемещен успешно. Можно подвергнуть его одному -exec также с && но два -execs используются для создания вещей немного более чистыми.

  • Второе -exec действие просто удалит пустой каталог, который содержал файл; ${1%/*} шаблон расширения параметра удара должен получить имя каталога, dirname работал бы также.

Пример:

$ tree
.
├── egg
├── ortdir1
│  └── foo.ort
├── ortdir2
│  └── bar.ort
├── outdir
└── spam

$ find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;

$ tree
.
├── egg
├── outdir
│  ├── bar.ort
│  └── foo.ort
└── spam
0
ответ дан 12 May 2016 в 04:04
  • 1
    @jpaugh Хорошо частично, потому что it' s слишком поздно для изменения моего ответа, который был первым отправленным - другие уже дали решение, которое Вы упоминаете и другие более эффективные пути к этому случаю:), Но возможно показывающий то, как использовать \1 и т.д., имеет некоторое значение для людей, которые приземляются на этот вопрос при поиске, кто don' t имеют такую простую проблему – Zanna 25 October 2017 в 07:05

Другие вопросы по тегам:

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