Переміщення всіх файлів вкладених папок до іншої папки


1

У мене є ієрархія папок, подібна до цього:

MainFolder
|
| - 01
| - 02
| - 03
| - 04
| - 05
| - 06
| - 07
| - 08
| - 09
| - 10

А всередині кожної з цих десяти папок є ще 10 папок і так далі. Всього у мене 10 рівнів.

Я хотів би перенести всі файли, включаючи ВСІ можливі розширення (включаючи zip і rar) до папки з назвою FinalFolder.

Я намагаюся використовувати таку команду:

find MainFolder -type f -print0 | xargs -0 mv -t FinalFolder

І це "робочий". Загалом, я ловлю 5k файлів, але я знаю, що у мене є 25k файлів, так що не все ловлять. У чому може бути проблема? І що важливіше, як це виправити?



Чи є перевага над більш простою find MainFolder -type f -exec mv \{\} FinalFolder \; ?
infixed

Не працює @DavidGolding, копіює всю структуру.
FXux

Дозвольте мені спробувати @infixed.
FXux

Те ж результат: /.
FXux

Відповіді:


0

Використовуйте більш просту команду find, щоб згладити каталог джерела.

Сповіщення Переконайтеся, що цільовий каталог існує першим! (або ви можете закінчити один Файл з назвою FinalFolder з тільки один ваших файлів)

 find MainFolder -type f -exec mv \{\} FinalFolder \;

EDIT

Це може перезаписати файли, якщо у вас є два або більше, які мають зіткнення імен. Якщо ви хочете, щоб уникнути, що ви можете отримати номери версій додаються за допомогою cp командування замість mv. Це має побічний ефект, що оригінальне дерево каталогів залишається незмінним, тому, можливо, доведеться піти і видалити його після обробки.

 find MainFolder -type f -exec cp --backup=numbered \{\} FinalFolder \;

Якщо це продовжує вимагати підтвердження, це, ймовірно, пов'язано з cp Команда, що має псевдонім cp -i. У цьому випадку використовуйте /bin/cp замість cp


Ви знаєте, це, напевно, буде безпечніше використовувати ln потім створити нове посилання для кожного файлу в цільовій папці rm -rf папка-джерело, коли ви були щасливі.
infixed

не зважай. занадто важко зробити basename. "{}", здається, не розширюється праворуч у списках, виконаних функцією find
infixed

мабуть find MainFolder -type f -exec ln \{\} FinalFolder \; працюватиме без необхідності basename команду до явного створення базової назви
infixed

Одне питання: якщо у мене є купа файлів з тим же ім'ям, що відбувається? Чи можу я автоматично перейменувати його?
FXux

те, що станеться зараз, - це останнє зроблене, яке буде замінено попереднім. Можна використовувати mv з -n перемикач no-clobber, а інші файли залишаться в MainFolder. Але якщо ви хочете, щоб номер версії, ви, ймовірно, повинні почати нове питання
infixed
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.