Próbowałem skopiować plik test.txt
do wielu katalogów za pomocą jednego polecenia:
cp ~/test.txt ~/folder1 ~/folder2
Ale mi się nie udało. Czy można to zrobić za pomocą jednego polecenia, aby móc skopiować plik lub nawet folder do wielu katalogów?
command-line
cp
nux
źródło
źródło
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Odpowiedzi:
cp
można kopiować z wielu źródeł, ale nie można kopiować do wielu miejsc docelowych. Zobaczman cp
więcej informacji.Jedyne znane mi polecenie bash, które może kopiować / zapisywać do wielu miejsc docelowych, to
tee
.Możesz użyć go w swoim przypadku w następujący sposób:
Zauważ, że
tee
zapisuje również dane wejściowe na standardowe wyjście (standardowe wyjście). Jeśli więc tego nie chcesz, możesz temu zapobiec, przekierowując standardowe wyjście/dev/null
w następujący sposób:źródło
>/dev/null
plików binarnych, nie psując terminala ...-r
opcji zcp
w przypadku katalogówtee
przeciwieństwie docp
kopiowania tylko zawartości pliku, ignorując jego tryb, własność, znaczniki czasu. Aby uniknąć powtarzania nazwy pliku:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Innym sposobem uzyskania kopii do wielu lokalizacji jest następujące polecenie:
Jeśli katalog 1 lub katalog 2 mają podkatalogi, w których nie chcesz kopiować pliku, dodaj
-maxdepth 0
opcję:Zauważ, że ten zastąpi każdy plik
dir1
idir2
zfile.txt
„s zawartości, oprócz kopiowania go. Aby kopiować tylkofile.txt
bez wpływu na inne pliki w tych katalogach, powiedz,find
aby działały tylko na katalogach:źródło
find
i dwa razy (w tym przypadku)cp
. Nie mówiąc już, żefind
potrzeba dużo czasu.Komenda
próbuje skopiować dwa pliki (
~/test.txt
i~/folder1
) do miejsca docelowegofolder2
. (A jeśli~/folder2
istnieje i jest katalogiem, pojawi się ostrzeżenie „pominięcie katalogu”).Jeśli chcesz wykonać wiele kopii pliku
test.txt
, musisz użyć pętli lub wielu poleceń ...(... i bądź ostrożny, jeśli spacje są osadzone w nazwach plików, musisz zacytować).
Aby skopiować całe katalogi, musisz użyć
-r
opcji:spowoduje to utworzenie
~/folder1/folder3
i uwzględnienie~/folder2/folder3
wszystkich plików.źródło
Możesz utworzyć skrypt pomocy lub możesz to zrobić za
xargs
pomocą funkcji drukowania (w tym przypadkuecho
):Spowoduje to, że każdy katalog będzie argumentem
cp
funkcji, wykorzystując plik testowy jako parametr.źródło
Po długich poszukiwaniach działa również jak Urok!
Spowoduje to skopiowanie pliku.txt do każdego katalogu w bieżącej lokalizacji w terminalu.
Spowoduje to skopiowanie folderu do każdego podkatalogu w bieżącej lokalizacji w terminalu.
Podzielam to, mam nadzieję, że pomaga także innym.
źródło
zsh
pomocąfor i in *(/); ...
można przewijać wszystkie podkatalogi, aby uniknąć[ -d ...
testu. Rozszerzone globowanie jest jednym z powodów, dla których lubię tobash
.zsh
, pierwsze polecenie tej odpowiedzi można uprościć jakofor dir in *(/); do cp /path/file.txt "$dir"; done
. Zobacz zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Jeśli chcesz skopiować plik test.txt w każdym katalogu w / tmp / target / ...
utwórz środowisko testowe:
skopiuj to:
źródło
Pomyślałem, że można zmienić odpowiedź na
Sylvain Pineau
gdzie
dir1
idir2
nie ma ich w bieżącym katalogu.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
tutaj find szuka
dir1
dwóch poziomów głębokości lub możesz pominąć-maxdepth
parametr, aby znaleźćdir1
we wszystkich folderach w bieżącym katalogu i poniżej niego.źródło