Как переместить файлы и каталоги в родительскую папку в Linux?

Ответы:

66
находить . -maxdepth 1 -exec mv {} .. \;

это также переместит скрытые файлы.

Вы получите сообщение:

mv: не может двигаться `. ' to `../. ': устройство или ресурс занят

когда он пытается переместиться .(текущий каталог), но это не причинит никакого вреда.

Джон Т
источник
1
Он также переместит все файлы из всех подкаталогов в родительский каталог текущего каталога. Я бы использовал, -maxdepth 1чтобы быть уверенным.
ℝaphink
1
Теперь он говорит: mv: не может двигаться ./scripts' to ../scripts ': каталог не пуст
1
У вас должен быть каталог с именем scripts в вашем родительском каталоге и в вашем текущем каталоге. Вам придется переименовать этот, прежде чем переместить его.
ℝaphink
1
Это сработало, но вы оставили один очень важный бит информации - вы должны запустить его из подкаталога. Также это не приведет к удалению самого подкаталога, поэтому вы должны создать резервную копию одного каталога и выполнить команду rmdir в подкаталоге.
Crafter
90

Я пришел сюда, потому что я новичок в этом вопросе. По какой-то причине вышесказанное не помогло мне. Что я сделал, чтобы переместить все файлы из директории в родительскую директорию:

cd to/the/dir
mv * ../
Бен Франсен
источник
12
Это не перемещает скрытый файл, хотя
Wavesailor
1 лайнер:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Давид Дрозд
10

Введите это в оболочке:

mv *.* ..

Это перемещает ВСЕ файлы на один уровень вверх.

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

Чтобы переместить все, включая папки и т. Д., Просто используйте *вместо*.*

Гил
источник
3
это не сработало с dirs! или скрытые файлы
Работает с dirs, по крайней мере для меня.
Maaartinus
5
Вы *не хотите *.*включать каталоги
Chris S
Это хороший документальный фильм
BlackBurn027
6

Это не может быть проще, чем:

mv * ../

Чтобы также переместить скрытые файлы:

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

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

Уильям Эдвардс
источник
2

В bash вы можете использовать shopt -s dotglob, чтобы * сопоставлять все файлы и перемещать их просто

shopt -s dotglob; mv * ..

Это не лучшее решение, поскольку параметр является постоянным для оболочки, пока вы не измените его

shopt -u dotglob

но я думаю это приятно знать.

maaartinus
источник
4
Назови это в подзаголовке (shopt -s dotglob && mv * ..). Таким образом, опция является локальной только для этой подоболочки.
Мартин Уединг
Хороший ответ - он прост, содержит скрытые файлы и не вызывает ошибку при копировании '.' и ".."
Даниэль Ховард
1

Метод, который не вызывает ошибок и работает каждый раз:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
источник
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]* ..

.[A-Za-z0-9]*Часть, чтобы убедиться , что вы не пытаетесь двигаться .или ..вперед, который потерпит неудачу.

ℝaphink
источник
0

В Linux просто переместить все файлы и папки в родительский каталог.

Перейдите в эту папку и используйте эту команду:

mv * /the full path

Например, если ваши файлы и папки выглядят следующим образом:

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

Перейдите в эту папку через cd:

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

Все ваши файлы и папки будут перемещены в папку 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, и лучшие ответы уже опубликованы.
Скотт
-1

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

Пример: a является родительским каталогом, а b является вложенным каталогом, мы хотим переместить / скопировать все файлы из b в a (вложенный каталог в родительский каталог).

cd b
cp * ..
mv * ..
М Икрам
источник
Добро пожаловать в Супер пользователя! Это дублирует другой ответ и не добавляет новый контент. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового.
DavidPostill