Я изучаю скрипты bash и хочу переместить все файлы * .ort в новый каталог и удалить каталог после перемещения файла .ort.
Примечание:
Я думаю, что это сработает, но я хотел подтвердить, прежде чем я просто запустил сценарий bash для каталога.
Синтаксис:
find / -iname "*.ort" -type d -exec /bin/mv {} /home/user123/Desktop/movedfiles/ \;
rmdir **/*/;
Я приветствую все предложения и отзывы об улучшениях или, если это сработает:)
Можно сделать:
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
также с &&
но два -exec
s используются для создания вещей немного более чистыми.
Второе -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
\1
и т.д., имеет некоторое значение для людей, которые приземляются на этот вопрос при поиске, кто don' t имеют такую простую проблему – Zanna 25 October 2017 в 07:05