У меня есть много папок, которые мне нужно объединить. Я знаю, что если я перетаскиваю содержимое из всех них поверх другого, я могу объединить их. Но с таким количеством папок у меня уйдут часы.
Итак, мне нужен способ объединения всех папок внутри директории с помощью bash-скрипта или программы, которая делает это.
РЕДАКТИРОВАТЬ Как плюс, мне бы хотелось, чтобы структура папок была сохранена и во всех папках были папки с одинаковыми именами. Эти папки должны быть объединены.
Я бы предложил выполнить поиск в родительской папке для . и включите все подпапки. Это позволит вам выбрать все файлы и затем переместить их в другую папку. Это объединит все содержимое в новую папку.
Если это ваша структура папок ...
fol1
| `-subfolA
| | `-one.txt
| `-subfolB
| `-two.txt
fol2
`-subfolA
| `-een.txt
`-subfolB
`-twee.txt
... а ты хочешь ...
fol1
| `-subfolA
| | `-een.txt
| | `-one.txt
| `-subfolB
| `-twee.txt
| `-two.txt
fol2
... тогда вы можете:
fol1
; Ctrl-A
, чтобы выбрать все подпапки; folB
. Наутилус увидит, что уже существует subfolA
и т. Д., И спросит, хотите ли вы объединить [этот / все из них] автоматически. Или вы можете открыть терминал и
cd path/to/fol1
cp -r ../fol2/* ./
Это тоже произойдет автоматически. Подробное объяснение, на случай, если новичок bash встречает этот ответ:
cd
меняет каталог. cp
копий; первая папка является источником, вторая - местом назначения. -r
означает спуск в подпапки («recurse»). ../fol2/*
означает one directory up / into fol2 / all files and folders you can find there
. ./
является текущим каталогом. Следующий скрипт на python должен делать то, что вы хотите. Просто скопируйте содержимое файла (скажем, sc1.py
) в папку, содержащую все подпапки, которые вы хотите объединить. Затем выполните команду chmod +x sc1.py
, а затем запустите этот файл в этой папке ./sc1.py
, и вы должны получить результат. Этот скрипт будет делать следующее:
Скажем, вы работаете в папке /home/bob/foo
и у вас есть сотни папок bar1
, bar2
, ...., bar99
внутри папки. foo
.
Запустите сценарий из /home/bob/foo/
, и он создаст папку /home/bob/foo/Merged
и передаст содержимое всех папок bar1
, bar2
и т. Д. ... в папку Merged
. Структура каталогов внутри папок bar1
, bar2
и т. Д. Останется без изменений
Вы можете проверить это где-нибудь, чтобы убедиться, что это то, что вы просили.
#!/usr/bin/env python
import subprocess as sbp
import os
path=os.getcwd()
fol = os.listdir(path)
p2 = os.path.join(path,'Merged')
sbp.Popen(['mkdir','Merged'])
for i in fol:
if os.path.isdir(i)==True:
if i!='Merged':
p1 = os.path.join(path,i)
p3 = 'cp -r "' + p1 +'"/* ' + p2
sbp.Popen(p3,shell=True)
Примечание: я абсолютный новичок в написании сценариев и только что выучил большинство этих команд. Если есть предложения по улучшению от людей вокруг - очень признателен.