Próbuję skopiować niektóre pliki do istniejących folderów. To jest przykład schematu
# origin
/home/user/myfiles/folder1/group1/1.jpg
/home/user/myfiles/folder1/group1/2.jpg
/home/user/myfiles/folder1/group2/1.jpg
/home/user/myfiles/folder1/group2/2.jpg
/home/user/myfiles/folder2/group1/1.jpg
/home/user/myfiles/folder2/group1/2.jpg
/home/user/myfiles/folder2/group2/1.jpg
/home/user/myfiles/folder2/group2/2.jpg
Schemat folderu docelowego już istnieje, tylko pliki źródłowe (jpg), których tam nie ma.
Moje pytanie brzmi: jak to zrobić?
Chciałbym skończyć z czymś takim jak poniżej, ale to nie działa. Może powinienem zawrzeć wyrażenie regularne w zapytaniu, aby oddzielić gwiazdkę od wartości i użyć jako początek / cel?
cp /home/user/myfiles/*/*/*.jpg /home2/user/myfiles/*/*/*.jpg
Moim pierwotnym zamiarem jest użycie tego schematu kopiowania na moje pytanie bez odpowiedzi: s3cmd: jak skopiować pliki z lokalnego do S3 wiadra z istniejącą strukturą jako możliwe rozwiązanie.
Odpowiedzi:
Z GNU cp możesz użyć
--parents
opcja, taka jak ta:Musisz
cd
po pierwsze, jeśli takcp --parents /home/user/myfiles/...
stworzy też tych rodziców, a skończysz z/home2/user/myfiles/home/parents/myfiles/
.Jeśli potrzebujesz odpowiedzi innej niż GNUish, tradycyjną metodą unixową będzie smoła na potoku.
Drugi
cd
znajduje się w podpowłoce z drugą tar, więc tam są rozpakowywane pliki. Sam archiwum jest tworzone, wysyłane przez potok i wyodrębniane w tym samym czasie. Dodaćv
Zaznacz jedną z tarów, jeśli chcesz raportować postępy.źródło
Następujące czynności powinny załatwić sprawę:
Zasadniczo rozpakowuję część nazwy pliku, która ma się zmienić między dwoma folderami, a następnie wydam polecenie kopiowania.
Zwróć uwagę na „cut -f 4- „powyżej - otrzymuje pola od czwartej. Możesz zmienić numer zgodnie z życzeniem
Może nawet
basename
lub istnieje prostsze polecenie ... ale na razie to zrobi :)źródło