Як перемістити файли та каталоги до батьківської папки в Linux?


Відповіді:


55
find . -maxdepth 1 -exec mv {} .. \;

це також перемістить приховані файли.

Ви отримаєте повідомлення:

mv: cannot move `.' to `../.': Device or resource busy

коли він намагається рухатися . (поточний каталог), але це не завдає шкоди.


1
Він також перемістить всі файли з усіх підкаталогів до батьківського поточного каталогу. Я б використовував -maxdepth 1 бути впевнені.
ℝaphink

1
Тепер він каже: mv: не може рухатися ./scripts' to ../scripts ': каталог не порожній

1
Ви повинні мати каталог, званий скриптами у вашому батьківському каталозі І в поточному каталозі. Вам доведеться перейменовувати його, перш ніж перемістити його.
ℝaphink

1
Це спрацювало, але ви залишили один дуже важливий біт інформації - ви повинні запустити це з підкаталогу. Також це не видаляє сам підкаталог, тому потрібно створити резервну копію одного каталогу і виконати rmdir у підкаталозі.
crafter

75

Я прийшов сюди, тому що я теж новачок у цій темі. З якихось причин вищезгаданого не зробили для мене трюк. Що я зробив, щоб перемістити всі файли з директорії до його батьківського каталогу, було:

cd to/the/dir
mv * ../

10
Це не переміщує прихований файл
Wavesailor

1 лайнер: (cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd

9

Введіть це в оболонці:

mv *.* ..

Це переміщує всі файли на один рівень вище.

Персонаж * - шаблон. Тому *.deb перемістить всі файли .deb і Zeitgeist.* буде переміщувати Zeitgeist.avi і Zeitgeist.srt одну папку вгору, оскільки, звичайно, .. вказує на батьківський каталог.

Щоб перемістити все, включаючи папки і т.д., просто використовуйте * замість *.*


2
це не спрацювало з dirs! або приховані файли

Він працює з dirs, принаймні для мене.
maaartinus

4
Ти хочеш * ні *.* для включення каталогів
Chris S

Його красивий документальний
BlackBurn027

6

Він не може бути простішим, ніж:

mv * ../

Щоб також перемістити приховані файли:

mv /path/subfolder/{.,}* /path/ 

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


2

У bash можна використовувати shopt -s dotglob зробити * збігатися з усіма файлами і перемістити їх просто

shopt -s dotglob; mv * ..

Це не найкраще рішення, оскільки налаштування є постійним для оболонки, поки ви не зміните його

shopt -u dotglob

але я думаю, що це добре знати.


4
Зателефонуйте йому в підсеку: (shopt -s dotglob && mv * ..). Таким чином, опція є локальною лише для цієї дочірньої оболонки.
Martin Ueding

Хороша відповідь - це просто, містить приховані файли і не викликає помилки щодо копіювання. ' і '..'
Daniel Howard

1

Метод, який не викликає помилок і працює щоразу:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done

1
find . -maxdepth 2 -type f -exec mv {} .. \;

Я використав варіант вище, щоб перемістити всі файли з підпапок у батьківську.

Я отримував дані в папках за роком, але з допомогою метаданих я міг би мати всі вони в одній папці, що полегшило управління.

напр.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3

0

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

mv * .[A-Za-z0-9]* ..

The .[A-Za-z0-9]* частина полягає в тому, щоб переконатися, що ви не намагаєтеся рухатися . або .. разом, що не вдасться.


0

Перенести всі файли та папки до батьківського каталогу в Linux просто.

Перейдіть до цієї папки та використовуйте цю команду:

mv * /the full path

Наприклад, якщо ваші файли та папки такі:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Перейти до цієї папки за допомогою компакт-диска:

cd /home/abcuser/test
mv * /home/abcuser

Всі ваші файли та папки перейдуть до папки з відхиленнями (батьківський каталог).


2
Завдяки @Gareth, було близько до того ж. Абхішек, будь ласка, не публікуйте жодних незв'язаних посилань, де це має сенс? Також перевірте форматування, будь ласка. Крім того, /the full path не працює в Linux, ви повинні уникнути пробілів з /the\ full\ path.
slhck

0

Не потрібно змінювати каталоги. Просто вкажіть * в кінці шляху:

mv /my/folder/child/* /my/folder/

Вище лише переміщує неприховані файли. Щоб використовувати лише приховані файли. *

mv /my/folder/child/.* /my/folder/

Вище двох можна об'єднати в одну команду:

mv /my/folder/child/{.,}* /my/folder/

Також див. Як перемістити всі файли, включаючи приховані файли, у батьківський каталог через *


0
find -type f|while read line; do mv $line ${line##*/}; done

Дякуємо за відповідь. Хоча це може працювати в простих сценаріях, трубопроводи find в while read це поганий спосіб використання find, а кращі відповіді вже були опубліковані.
Scott

-1

перейти до підкаталогу та виконати наступну команду для копіювання або переміщення файлів.

ex: a є батьківським каталогом, а b є підкаталогом, ми хочемо перемістити / скопіювати всі файли з b до (підкаталог у батьківський каталог).

cd b
cp * ..
mv * ..

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