28Jun

Jak skopiować plik do wielu katalogów za pomocą jednego polecenia w systemie Linux

Kopiowanie pliku za pomocą wiersza poleceń systemu Linux jest łatwe. Co jednak, jeśli chcesz skopiować ten sam plik do kilku różnych lokalizacji? To też jest łatwe, a pokażemy ci, jak to zrobić za pomocą jednego polecenia.

Normalnie, aby skopiować jeden plik, użyj polecenia cp, łączącego z plikiem źródłowym i katalogiem docelowym:

cp ~ /Documents/ FileToBeCopied.txt ~ /TextFiles/

Aby skopiować go do dwóch innych katalogów, wiele osób po prostu uruchomiłoby poleceniewięcej razy, z różnymi celami:

cp ~ /Documents/ FileToBeCopied.txt ~ /Dropbox/ cp ~ /Documents/ FileToBeCopied.txt /media/lori/MYUSBDRIVE/

Jednak możemy wykonać to samo zadanie za pomocą jednego polecenia:

echo dir1 dir2 dir3 |xargs -n plik 1 cp1

Oto jak działa to polecenie. Polecenie echo normalnie zapisuje na ekranie. Jednak w tym przypadku chcemy przekazać dane wyjściowe polecenia echo jako dane wejściowe do polecenia xargs. Aby to zrobić, używamy symbolu potoku( |), który przekazuje dane wyjściowe z jednego polecenia jako dane wejściowe do innego. Polecenie xargs uruchomi komendę cp trzy razy, za każdym razem dołączając do niej ścieżkę do następnego katalogu z komendy echo na końcu polecenia cp. Istnieją trzy argumenty przekazywane do xargs, ale opcja -n 1 w komendzie xargs mówi, aby dołączać tylko jeden z tych argumentów do polecenia cp za każdym razem, gdy jest uruchamiany.

Aby zachować wcześniejszy przykład, trzy oddzielne polecenia cp można połączyć w jedno takie polecenie:

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp ~ /Documents/ FileToBeCopied.txt

Zwróć uwagę, że jeśli kopiowany plik istnieje w dowolnym z określonych katalogów docelowych, plik w tym miejscu docelowym zostanie automatycznie zastąpiony. Nie pojawi się pytanie, czy chcesz zastąpić plik.(Zwykle, gdy używasz polecenia cp do skopiowania pliku do pojedynczej lokalizacji, możesz dodać opcję -i, aby zapytać, czy chcesz zastąpić istniejący plik. Jednak opcja -i jest interaktywną opcją( powodujecp, aby poprosić o dane wejściowe od użytkownika) i nie możesz używać interaktywnej opcji z poleceniem cp, gdy używasz go w połączeniu z xargs.)

Jeszcze jedną rzeczą do rozważenia jest to, że jeśli kopiujesz bardzo duży plik, możeszchcesz dodać opcję no-clobber( -n) do polecenia cp w pojedynczym poleceniu powyżej. Ta opcja automatycznie zapobiega nadpisaniu pliku w miejscu docelowym, jeśli już istnieje. Jeśli kopiujesz bardzo duży plik przez sieć, może być on powolny i możesz chcieć uniknąć korzystania z zasobów wymaganych do skopiowania i zamiany pliku. Poniższe polecenie dodaje opcję -n i nie skopiuje pliku do żadnego miejsca docelowego wymienionego w argumentach instrukcji echo, jeśli plik już istnieje w tym miejscu docelowym.

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp -n ~ /Documents/ FileToBeCopied.txt

Wpisz man echo, man xargs lub man cp w wierszu poleceń w systemie Linux, aby uzyskać więcej informacji na temat któregokolwiek z tych poleceń.