Переміщення файлів і папок рекурсивно в Linux


75

Поміркуйте:

ls -al ../public-back
drwxrwxr-x  4 apache   apache     4096 Apr 19 03:32 templates

ls -al ../public-back/templates

drwxrwxr-x  2 apache   apache    4096 Apr 19 03:33 content
drwxrwxr-x  2 apache   apache   20480 Apr 20 06:14 images
drwxrwxr-x  2 apache   apache    4096 Apr 19 03:35 video

ls -al /public

drwxrwxr-x  4 apache   apache     4096 Apr 20 09:49 templates

ls -al /public/templates

drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 content
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 images
drwxrwxr-x  2 apache   apache    4096 Apr 20 09:50 video

Як перемістити вміст /public-back/templatesрекурсивно з дозволами в /public/templates?


mv ../public-back/templates/* public / templates /

mv -R ../public-back/templates/* public/templates/Я б все-таки проголосував, щоб перенести це питання.

2
mv: недійсний варіант - R @ Владислав Зоров

3
я зробив cp -a ../public-back/templates/ public /

Відповіді:


92

Якщо я не розумію питання, це діятиме:

mv /public-back/templates/* /public/templates

Крім того, якщо у вас є величезний список файлів, додавання -iзапитає перед тим, як щось перезаписати, що додасть певної безпеки при використанні макіяжів, таких як *.


14
Це не переміщує приховані файли.
Арда

2
Див. Askubuntu.com/a/259386/358964 щодо встановлення dotglob, тому приховані файли також будуть переміщені.
mkobit

3
Примітка. Це не перезапише файли у підкаталогах. Ви отримаєте Directory not emptyповідомлення.
Армстронджест

Здається, що це вирівняло ієрархію каталогів. Не зберегла папки в оригінальній для мене папці. Усі файли потрапили в одну папку, а не буквально переміщуючи оригінальну папку з однаковою структурою.
Роберт Ноак

Це рішення працює, але якщо ви бачите цю помилку: mv: target '/public/templates' is not a directoryпросто створити папку вручну mkdir /public/templates.
Алі Шабдар

8

Сторінка man для cp повідомляє:

-p same as --preserve=mode,ownership,timestamps
-r same as --recursive=copy directories recursively

Спробуйте;

cp -rp /public-back/templates/* /public/templates/

13
mvє для руху , а cpдля копії - семантичним / етимологічним відмінністю.
Маріус Бутук

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

4

Під час переміщення предметів з мого пальчикового накопичувача до моєї системи OSMC я знайшов дуже корисне наступне:

find /media/Pi\ Hard\ 16GB/ -name '*' -exec mv -v {} /media/External\ HDD/Videos/ \;

Пояснення, як це працює нижче.

BTW, не забудьте додати зворотну косу рису перед будь-якими пробілами у назвах каталогів джерела чи призначення (див. Вище).

find  finds all files and folders in the destination path.

/media/Pi Hard 16GB/ is the path searched. Escape special char such as spaces.

-name '*' filters on names. If you do not escape or quote this then 
          the shell will expand it before find sees it.

-exec     Executes a command, in our case mv

-v        Verbose, so you can see what's happening (optional)

{}        is replaced by the name of the found object.

Ефективно ви знаходите всі файли та всі папки та переміщуєте їх по одній (або якщо каталог знайдеться спочатку, ви переміщуєте цей каталог та вміст у ньому). Це запускає новий процес для кожного кроку і є дуже неефективним. Використовуйте це лише тоді, коли звичайні команди виходять з ладу.


2

Здається, що телевізор не робить цього. Але ви можете використовувати цю маленьку хитрість, працює як принадність:

tar cf - . |(cd /targetdir; tar xvf -)

і зберігає дозволи та все.

Примітка: жодне з перерахованого вище не працювало для мене, ось чому це рішення.


1
cp -a --link ../public-back/* /public/.  &&  rm -rf ../public-back

Тому створіть жорсткі посилання в каталозі призначення та видаліть вихідний dir. 'mv' просто не працюватиме у вашому випадку, і взагалі працює лише тоді, коли у джерела dir та dest немає загальних підкреслень.

Зауважте, що я припускаю, що слово "рухатись" у запитанні означає, що після операції джерело dir повинне піти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.