Это собирающееся быть немного хитрым, я предполагаю :-)
Когда я открываю терминал в папке и запускаю скрипт, тот сценарий должен:
Родительская папка мы помогаем, не будет содержать папок, просто содержание всех их.
Это должно работать на скрытые файлы и папки также. Это было бы очень полезно для уборки в доме :-)
Я попробовал что-то как:
find . -type f -name "*" -depth | xargs mv ./
Но без удачи.
Спасибо за Вашу справку :-)
Самый простой и самый чистый путь, по-моему, состоял бы в том, чтобы использовать эту команду:
find . -type f -exec mv --backup=numbered {} . \; && find . -maxdepth 1 -type d -exec rm -r {} +
find
команда № 1:
.
: поиски в текущем рабочем каталоге; -type f
: поиски файлов; -exec [...]
: выполняет любого команда для каждого результата (использующий {} [...] \;
) или команда для всех результатов (использующий {} +
); mv --backup=numbered . \;
: перемещения каждый результат в текущем рабочем каталоге, создав резервное копирование файлов с тем же именем файла уже в текущем рабочем каталоге; find
команда № 2:
.
: поиски в текущем рабочем каталоге; -maxdepth 1
: поиски только на первом уровне целевой иерархии каталогов; -type d
: поиски каталогов; -exec [...]
: выполняет любого команда для каждого результата (использующий {} [...] \;
) или команда для всех результатов (использующий {} +
); rm -r {} +
: удаляет каждый результат; Тест на тестовой иерархии каталогов:
user@debian ~/tmp % tree -a
.
├── 1
│ ├── file1
│ ├── file2
│ ├── file3
│ └── .hidden
├── 2
│ ├── file1
│ ├── file2
│ ├── file3
│ └── .hidden
└── 3
├── file1
├── file2
├── file3
└── .hidden
3 directories, 12 files
user@debian ~/tmp % find . -type f -exec mv --backup=numbered {} . \; && find . -type d -exec rm -r {} +
rm: refusing to remove "." or ".." directory: skipping "."
user@debian ~/tmp % tree -a
.
├── file1
├── file1.~1~
├── file1.~2~
├── file2
├── file2.~1~
├── file2.~2~
├── file3
├── file3.~1~
├── file3.~2~
├── .hidden
├── .hidden.~1~
└── .hidden.~2~
0 directories, 12 files
Для перемещения всех файлов рекурсивно в текущий каталог обратите внимание, что это переместит все файлы в этот каталог (не их родительские каталоги):
find . -type f -exec mv -i -t . {} +
Вместо -i
как показано уже можно использовать --backup=numbered
@kos.
Для удаления всех пустых каталогов:
find . -type d -empty -delete
Read man find
для получения большей идеи.
Это должно добиться цели для Вас:
find . -type f -exec mv --backup=numbered "{}" . \; && find . -type d -empty -delete
Это 2, находят команды, первый находит и перемещает файлы, второй будет только работать, если первая команда будет успешна и удалит каталоги.
Благодаря Rinzwind для указания на опасность дублирующихся имен файлов, предлагая мне добавить --backup=numbered
опция, первоначально используемая Косом.