В Linux (Ubuntu), как вы перемещаете все файлы и каталоги в родительский каталог?
12 ответов
Я пришел сюда, потому что я новичок в этом вопросе. По какой-то причине вышесказанное не помогло мне. То, что я сделал, чтобы переместить все файлы из каталога в его родительский каталог:
cd to/the/dir
mv * ../
find . -maxdepth 1 -exec mv {} .. \;
это также переместит скрытые файлы.
Вы получите сообщение:
mv: cannot move `.' to `../.': Device or resource busy
когда он пытается двигаться .
(текущий каталог), но это не причинит никакого вреда.
Введите это в оболочке:
mv *.* ..
Это перемещает ВСЕ файлы на один уровень вверх.
Символ *
является подстановочным знаком. Таким образом, *.deb
переместит все файлы .deb, а Zeitgeist.*
Переместит Zeitgeist.avi и Zeitgeist.srt на одну папку вверх, поскольку, конечно, ..
указывает на родительский каталог.
Чтобы переместить все, включая папки и т.д., Просто используйте *
вместо *.*
Это не может быть проще, чем:
mv * ../
Чтобы также переместить скрытые файлы:
mv /path/subfolder/{.,}* /path/
mv
- это команда для перемещения файлов, *
означает все файлы и папки, а ../
- это путь к родительскому каталогу.
В bash вы можете использовать shopt -s dotglob, чтобы * сопоставлять все файлы и перемещать их просто
shopt -s dotglob; mv * ..
Это не лучшее решение, поскольку параметр является постоянным для оболочки, пока вы не измените его
shopt -u dotglob
но я думаю это приятно знать.
find . -maxdepth 2 -type f -exec mv {} .. \;
Я использовал вариант выше, чтобы переместить все файлы из подпапок в родительский.
Я собирал данные в папки по годам, но, обнаружив, используя метаданные, я мог хранить их в одной папке, что облегчало управление.
например.
/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Метод, который не вызывает ошибок и работает каждый раз:
ls -1A . | while read -r file
do
mv "./${file}" ..
done
find -type f|while read line; do mv $line ${line##*/}; done
Предполагая, что все ваши скрытые файлы начинаются с точки, за которой следует буква или число (что они должны), вы можете использовать
mv * .[A-Za-z0-9]* ..
.[A-Za-z0-9]*
часть состоит в том, чтобы убедиться, что вы не пытаетесь двигаться .
или ..
вперед, который потерпит неудачу.
Нет необходимости менять каталоги. Просто включите * в конце пути:
mv /my/folder/child/* /my/folder/
Выше только перемещаются не скрытые файлы. Для перемещения используйте только скрытые файлы.*
mv /my/folder/child/.* /my/folder/
Выше двух можно объединить в одну команду:
mv /my/folder/child/{.,}* /my/folder/
Также смотрите:Как переместить все файлы, включая скрытые, в родительский каталог через *
В 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 (родительский каталог).
перейдите в подкаталог и выполните следующую команду для копирования или перемещения файлов.
Пример: a является родительским каталогом, а b является вложенным каталогом, мы хотим переместить / скопировать все файлы из b в a (вложенный каталог в родительский каталог).
cd b
cp * ..
mv * ..