Скрипт для & ldquo; extracting & rdquo; вложенные папки в родительскую папку

Это будет немного сложно, я думаю: -)

Когда я открываю терминал в папке и запускаю скрипт, этот скрипт должен:

перемещать весь контент из всех подпапок в верхнюю родительскую папку (рекурсивно) удалять все пустые папки

Родительская папка, в которой мы находимся, не будет содержать папок, просто содержимое всех из них.

Должно работать для скрытых файлов и папок. Это было бы очень полезно для уборки дома: -)

Я пробовал что-то вроде:

find . -type f -name "*" -depth | xargs mv ./

Но не повезло.

Спасибо за ваша помощь: -)

1
задан 11 August 2015 в 16:14

2 ответа

Чтобы переместить все файлы рекурсивно в текущий каталог, обратите внимание, что это переместит все файлы в этот каталог (а не их родительские каталоги):
find . -type f -exec mv -i -t . {} +  

Вместо -i вы можете использовать --backup=numbered, как показано уже @kos.

Чтобы переместить все файлы в рекурсивно в текущем каталоге, обратите внимание, что это переместит все файлы в этот каталог (а не их родительские каталоги):
find . -type f -exec mv -i -t . {} +  

Прочтите man find, чтобы получить больше информации.

5
ответ дан 23 May 2018 в 18:18
  • 1
    Если вы используете cp, папки никогда не будут пустыми – Aserre 11 August 2015 в 17:21
  • 2
    Это оставляет копии всех файлов в каталогах, не правда ли? Поэтому удалить пустые каталоги не удастся. Это определенно безопаснее, чем мое предложение! – Arronical 11 August 2015 в 17:21
  • 3
    @Ploutox мой плохой .. это было из моего теста. – heemayl 11 August 2015 в 17:23
  • 4
    @Arronical мой плохой .. это было из моего теста .. исправлено .. – heemayl 11 August 2015 в 17:23
  • 5
    +1, но проверьте комментарий Ploutox , кажется, что ошибка в mv при использовании опции -b, используя --backup=[], предотвращает такую ​​очень опасную вещь – kos 11 August 2015 в 17:29

Это должно сделать трюк для вас:

find . -type f -exec mv --backup=numbered "{}" . \; && find . -type d -empty -delete

Это 2 команды поиска, которые первый находит и перемещает файлы, второй запускается только в том случае, если первая команда выполнена успешно и удалит каталоги.

Благодаря Rinzwind для указания опасности дублирования имен файлов, что побудило меня добавить опцию --backup=numbered, первоначально используемую Kos.

2
ответ дан 23 May 2018 в 18:18
  • 1
    А если 2 файла в 2 каталогах имеют одинаковое имя? как упомянул Кос: использование "-b" опция при перемещении;) – Rinzwind 11 August 2015 в 16:53
  • 2
    ООО да! Спасибо за предупреждение @Rinzwind! – Arronical 11 August 2015 в 16:56
  • 3
    Спасибо, Arronical, работает так, как должно! Это позволит мне много времени в будущем :-) Еще раз спасибо! – Sebastian 11 August 2015 в 17:02
  • 4
    как насчет find . -type d -empty -delete? – Ron 11 August 2015 в 17:05
  • 5
    find ./* -type d -exec rm -r "{}" \; это приведет к удалению всех каталогов, являются ли они пустыми или нет. – heemayl 11 August 2015 в 17:08

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

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