Portál AbcLinuxu, 5. května 2025 13:58
cp soubor home/*/a napsalo cp: copying multiple files, but last argument `zlobi.php' is not a directory
cp
je kopírování souborů, nevím tedy jaký dotaz. Pokud zadáte příkazu cp
2 parametry, zkopíruje se první soubor/adresář do druhého. Pokud je parametrů více než dva (n
), musí být poslední adresář – pak se všechny soubory/adresáře z parametrů 1
až n-1
nakopírují do adresáře n
(poslední parametr). Pokud chcete jedet soubor rozkopírovat na více míst, použijte např. cyklus for
nebo příkaz find
. Příkaz cp soubor home/*/
rozvine automaticky shell, tj. místo hvězdičky dosadí jména souborů/podadresářů, tzn. pokud jsou v adresáři home
např. adresáře user1
, user2
a user3
, zavolá shell ve skutečnosti příkaz cp soubor home/user1/ home/user2/ home/user3/
– váš příkaz tedy měl nejspíš víc parametrů, než 2 (alespoň ta hláška tomu napovídá).
#!/usr/bin/python import glob, shutil for dest in glob.glob('/home/*'): shutil.copy('soubor', dest)ale fungovat bude i tohle
for i in /home/*; do cp soubor $i; donenebo třeba find ... exec nebo prostě jak chceš.
#!/usr/bin/python import shutil, os, pwd for pwitem in pwd.getpwall(): homedir = pwitem.pw_dir if homedir.startswith('/home/'): shutil.copy('soubor', homedir)tohle nakopíruje 'soubor' všem uživatelům do jejich adresářů, pokud mají domovský adresář v /home.
for i in /home/*/; do cp soubor $i; done
Python :-O, omg...
Promiňte, ale bohužel máte malé znalosti shellu a příliž velké ego.
1) žádné uvozovky jsem vám neopravoval. Nechápu.
2) na pythonem jsem se pousmál (to je věc vkusu), a napsal jsem to "líp v shellu"
Mezi příkazy:
for i in /home/*; do cp soubor $i; done a for i in /home/*/; do cp soubor $i; done
je -- v tomto případě dost -- podstatný rozdíl, pokud jej neznáte, váš problém. cp neví co má správně dělat, poud mu to neřeknete správně.
Můžete si to vyzkoušet např. takto: mkdir home; cd home; mkdir jan martinek; touch lama; touch soubor.txt; cd ..; for i in home/*; do echo cp soubor.txt $i; done; for i in home/*/; do cp echo soubor.txt $i; done
Nikdo přece nechce soubor.txt kopírovat krom adresářů uživatelů i sám do sebe, případně zabít lamu. Co na to ochránci zvířat...
echo
a cp
.
Odpuštěno ;) Jen by mě zajímalo, jaký kurs jste vypsal sám na sebe, když jste se sázel o ty uvozovky.
V shellu bych tu extended verzi napsal zhruba takto:
cut -d: -f6 /etc/passwd | grep ^/home/ | while read home; do cp soubor.txt $home; done.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.