Bash скрипт проверяет папку для файла, затем перемещает файл в каталог root и удаляет пустой каталог - PullRequest
0 голосов
/ 30 января 2020

Это должно быть просто. Мне нужно проверить каждую папку в каталоге root на наличие файлов, переместить файлы из своего каталога в каталог root и удалить этот пустой каталог. Я использовал этот пакетный скрипт в Windows, но я хотел бы преобразовать его в bash скрипт, и я не слишком знаком с bash.

cd /d M:\
for /F "delims=" %%a in ('dir /B /AD') do (
   cd "%%a"
   for /F "delims=" %%b in ('dir /B /AD') do (
      move "%%b" ..
   )
   move *.* ..
   cd ..
   rd "%%a"
)

Пример:

/root

/root/Test/1.txt

/root/1.txt

1 Ответ

0 голосов
/ 30 января 2020

самое простое решение (которое может переусердствовать) - просто найти все файлы в подкаталогах для root/ и переместить их в root/, а затем попытаться удалить только все подкаталоги root/

find root/ -mindepth 2 -maxdepth 3 -type f -exec mv {} root/ ";"
rmdir --ignore-fail-on-non-empty root/*/

это не проверяет наличие нескольких файлов с одинаковыми именами (и просто перезаписывает их). он также удалит все пустые каталоги в root/.

, еще одна попытка удалить подкаталоги, только если он содержит перемещенный файл:

root=root/

for f in "${root}"/*/*; do
  if [ -f "${f}" ]; then
    rm -f "${root}/${f##*/}"
    mv "${f}" "${root}"
    rmdir --ignore-fail-on-non-empty "${f%/*}"
  fi
done
...