Czy istnieje sposób na skopiowanie listy plików, które współużytkują wspólny katalog podstawowy, zachowując ich względną strukturę katalogów? Pliki ze ścieżkami względnymi są wymienione w pliku tekstowym. edycja Mam nazwy plików wymienione w zwykłym pliku tekstowym.
Chciałbym to zrobić bez użycia skryptu (bez bash / batch / python / ruby / lua / itp.), Podobnie jak w wget -i
przypadku adresów URL. (Moim powodem jest to, że dałoby to ogólne / niestandardowe rozwiązanie dla dość powszechnego zadania).
Próbowałem cat list.txt | xargs -I % cp % new_folder
z Kopiuj listę plików, ale nie zachowała względnej ścieżki do katalogu.
Zrobiłbym to, aby wyeksportować mój wybór plików (które już mam w pliku tekstowym) ze struktury katalogów, która ma dużą liczbę plików (zdarza się to od czasu do czasu).
źródło
Odpowiedzi:
tar cvf - ./filesAndDirecotries | (cd targetDirectory; tar xvf - )
TAR (Tape Archive to stara komenda do utworzenia pliku archiwum) może zapisywać do stdin (parametr „-” dla pliku) i potokować i czytać ze stdin w drugim katalogu.
Powyższe polecenie najpierw tworzy plik tar i zapisuje do stdin i przesyła potokiem do powłoki oraz zmienia katalog i rozpakowuje plik, czytając go ze stdin.
źródło
-T
przełącznika:-T, --files-from F: get names to extract or create from file F
tar cvf - -T filelist.txt | tar xvf - -C newdir
Odpowiedź od unixUser postawił mnie na właściwe tory. Okazuje się, że
tar
potrafi zarówno odczytywać nazwy plików, jak i katalogów z pliku tekstowego-T
, a nawet zmieniać katalog za pomocą-C
:To odpowiada na pytanie, które miałem.
źródła
Aby uzyskać te informacje od pomysłu unixUser dał mi , ja zanurkował do plików tar z pliku tekstowego , co prowadzi do trpn „s (P) i Tinkster ” (A) s konwersję LinuxQuestions.org . Jednocześnie sprawdzając stronę podręcznika tar pod kątem dowolnej opcji związanej z plikiem , oba wyszukiwania doprowadziły do
-T
przełącznika! Aby uniknąć polegania na powłoce do zmiany katalogu, przeszukałem ją również w poszukiwaniu opcji związanych z katalogiem i znalazłem-C
przełącznik. - Widzę, żetar
jest prawdopodobnie polecenie przeznaczone do grupowania (kopii) plików na wiele sposobów.Dzięki temu można użyć pliku binarnego tar bez * polegania na skryptach. Po prostu niesamowite, jak przydatna jest smoła.
(*: Z preferencjami : Uważam bash / perl / python / cokolwiek zbyt ogólne narzędzie do tego dość dokładnie . Zadania Jednakże, jak wskazał przez grawity , rury są wygodne - bez nich powinniśmy być zmuszeni do utworzenia pliku pośredniego, np.
tar cvf intermediate.tar -T filelist.txt
itar xvf intermediate.tar -C newdir
.)źródło
Technicznie rzecz biorąc, podany przykład używa już bash. I właśnie dlatego powłoka jest przede wszystkim skryptowalna - jest to tak proste zadanie, że nie potrzeba do tego dedykowanego narzędzia / programu .
Lub:
Lub:
Lub:
(
install
jest krótszy, ale nie zachowuje trybów, niestety).źródło
tar
polecenie wydaje się odpowiadać moim potrzebom; Nie wiedziałem, że ma-T
przełącznik. Myślę, że dobrze jest mieć te opcje dostępne tak jak tutaj, a twoja odpowiedź wyjaśnia również, jak to się zwykle robi.PIPE
słowo kluczowe), ale z całą pewnością nie został do tego zaprojektowany - w porównaniu nawet Windows CLI jest bardziej uniksowy.