Jak mogę znaleźć wszystkie pliki określonego typu / nazwy i skopiować je o -n poziom wyżej ? Oto struktura drzewa systemu plików:
germany/
|
adventure/
|
300x600/
| |
| file1.jpg
| file2.zip
|
400x600/
|
file8.jpg
file4.zip
switzerland/
|
adventure/...
Istnieje wiele folderów krajowych, około 20, a pliki .zip nie mają gwarancji głębokości 3 poziomów. Obecnie jestem w ich folderze nadrzędnym countries/
i chcę znaleźć i skopiować wszystkie pliki .zip w górę o jeden poziom, do adventure/
katalogu odpowiedniego kraju / folderu.
Próbowałem:
find . -type f -name '*.zip' -exec mv {}/.. \;
ale ten nieszczęśliwie zawiódł. Przesuwało każdy plik o jeden poziom wyżej, a następnie były przenoszone jeszcze raz o jeden poziom wyżej.
Dzięki!
EDYCJA:
Grałem trochę z rozwiązaniami z odpowiedzi i czytałem dużo man
stron :). Wreszcie zaakceptowałem rozwiązanie, które najbardziej mi się podobało, ponieważ jest eleganckie i niezależne od powłoki.
Nadal próbuję coś wymyślić:
- Czy
find
działa jako pętla lub czy nawiasy klamrowe są traktowane jako „lista / tablica” w innych językach programowania? Czyli: czy wypełnia się znalezionymi wynikami (tzn. Ciągami) naraz, a następnie przekazuje się polecenie poniżej-exec
? - Dlaczego przeniesienie miało miejsce najpierw o jeden poziom wyżej, a następnie o jeden poziom wyżej?
- Czy istnieje sposób, aby od razu powiedzieć,
mv/cp
aby przejść -n poziomy [góra / dół]?
mv
polecenia. Zakładam, że chcesz skopiować pliki, jak mówią tytuł i wprowadzenie.