Featured Posts

.: Ad:.

25 września 2015

Skrypt do działań wewnątrz folderu…

Załóżmy, że mamy do zrobienia skrypt, który ze wskazanego folderu przenosi rekursywnie zawartość podfolderów do folderu bieżącego (odpalamy z terminala, więc zawsze jakiś tam folder jest bieżący) i dodatkowo kasuje puste foldery. Mile widziane by było gdyby to działało na pliki i foldery ukryte.
Powinna to załatwić następująca kombinacja:
find . -type f -exec mv --backup=numbered {} . \; &&
find . -maxdepth 1 -type d -exec rm -r {} +
Jak to działa?


find numer 1:

. <kropka> polecenie find przeszukuje przeszukuje bieżący folder;

-type f szuka tylko plików;

-exec […] dla każdego wyniku odpala polecenie (i wtedy dodajemyna końcu {} [...] \);

 mv --backup=numbered . \; przenosi każdy wynik szukania do bieżącego katalogu, tworząc numerowaną kopię pliku, gdy powtarzają się nazwy.

Idziemy do drugiej linii, find numer 2:

. <kropka> polecenie find przeszukuje przeszukuje bieżący folder;

-maxdepth 1 określa poziom zagłebienia w szukaniu, tutaj szuka tylko do pierwszego poziomu podfolderów;

-type d szuka tylko katalogów;

-exec […] dla wszystkich wyników odpala polecenie (i wtedy dodajemyna końcu {} +);

rm –r {} + kasuje każdy wynik.

Przykładowo, powinno to działać tak:
user@debian ~/tmp % tree -a
.
├── 1
│   ├── file1
│   ├── file2
│   ├── file3
│   └── .hidden
├── 2
│   ├── file1
│   ├── file2
│   ├── file3
│   └── .hidden
└── 3
    ├── file1
    ├── file2
    ├── file3
    └── .hidden

3 directories, 12 files
user@debian ~/tmp % find . -type f -exec mv --backup=numbered {} . \; && find . -type d -exec rm -r {} +
rm: refusing to remove "." or ".." directory: skipping "."
user@debian ~/tmp % tree -a
.
├── file1
├── file1.~1~
├── file1.~2~
├── file2
├── file2.~1~
├── file2.~2~
├── file3
├── file3.~1~
├── file3.~2~
├── .hidden
├── .hidden.~1~
└── .hidden.~2~

0 directories, 12 files

Brak komentarzy:

Prześlij komentarz