Mam DUŻĄ liczbę plików w następującej strukturze: wszystkie pliki w / base /, następnie 4 foldery z 2 „losowymi” literami, a następnie szereg powiązanych ze sobą plików.
Przykład:
/base/ab/12/13/37/file1.txt
/base/ab/12/13/37/file2.txt
/base/ab/12/13/37/file3.txt
/base/cd/b8/e2/a1/other1.txt
....
/base/cd/b8/e2/a1/other52.txt
/base/af/f3/45/9e/third1.txt
/base/af/f3/45/9e/third2.txt
itp
Chcę zachować większość struktury, ale na końcu dodaj jeden DODATKOWY (dodatkowy_folder) folder, do którego należą moje pliki. Tak, aby powyższe zostało zmienione na:
/base/ab/12/13/37/extra_folder/file1.txt
/base/ab/12/13/37/extra_folder/file2.txt
/base/ab/12/13/37/extra_folder/file3.txt
/base/cd/b8/e2/a1/extra_folder/other1.txt
Oczekuję, że będę potrzebował skryptu powłoki i polecenia move.
Dziękuję Ci bardzo.
linux
shell-script
directory
move
Nixxon
źródło
źródło
for
,sed
i / lubfind
, i wrócić do nas nie powinno być żadnego problemu z tym?Odpowiedzi:
Od tego zaczynamy:
Najpierw dodajemy nowe katalogi:
Używamy obu
-mindepth 4
i-maxdepth 4
do tworzenia nowych katalogów tylko na poziomie czwartym. Bez nich-mindepth 4
otrzymalibyśmy nowe katalogi na wyższych poziomach, a bez-maxdepth 4
nowych katalogów sami zapełniłyby się nowymi katalogami, dopóki nazwy ścieżekfind
nie stałyby się tak długie, że nie byłby już w stanie stworzyć więcej.extra_folder
Katalog jest tworzony zmkdir
wywoływana z-exec
. Teraz mamyNastępnie przeniesiemy pliki w dół:
Wyszukuje każdy zwykły plik w katalogu lub pod
base
katalogiem (zakładam, że istnieją pliki tylko na najniższym poziomie), które znajdują się na poziomie piątym. Następnie używa polecenia-execdir
do uruchomieniamv
polecenia w katalogu, w którym znajduje się znaleziony plik ({}
będzie to nazwa bazowa znalezionego pliku).Skończyliśmy z
Za jednym razem:
Znajduje wszystkie zwykłe pliki i przenosi je do katalogu o nazwie
extra_folder
niezależnie od tego, od czego mają zacząć. Kilkukrotne uruchomienie tego polecenia spowoduje ich przesunięcie w dół.Mini-skrypt wywoływany przez
-execdir
:Zostanie to wywołane z nazwą folderu as
$1
iz nazwą pliku as$2
i utworzy folder, jeśli nie istnieje, a następnie przeniesie do niego plik.źródło