Snažím se xkrát duplikovat video soubor z příkazového řádku pomocí cyklu for, zkoušel jsem to takto, ale nefunguje to:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Přijatá odpověď:
Váš shell kód má dva problémy:
echo
by tam neměl být.- Proměnná
$i
je zapsáno chybně jako$1
v názvu cílového souboru.
Chcete-li vytvořit kopii souboru ve stejném adresáři jako samotný soubor, použijte
cp thefile thecopy
Pokud tam vložíte něco jiného, např.
cp thefile theotherthing thecopy
pak se předpokládá, že chcete zkopírovat thefile
a theotherthing
do adresáře s názvem thecopy
.
Ve vašem případě konkrétně hledá soubor s názvem test.ogg
a jeden s názvem echo
zkopírujte do adresáře test$1.ogg
.
$1
se s největší pravděpodobností rozšíří na prázdný řetězec. To je důvod, proč, když odstraníte echo
z příkazu získáte „test.ogg a test.ogg jsou stejné soubory“; vykonávaný příkaz je v podstatě
cp test.ogg test.ogg
Pravděpodobně jde o překlep.
Nakonec chcete něco takového:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Nebo jako alternativa
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Nebo pomocí tee
:
tee test{1..100}.ogg <test.ogg >/dev/null
Poznámka:Toto by s největší pravděpodobností fungovalo pro 100 kopií, ale pro tisíce kopií může vygenerovat chybu „příliš dlouhý seznam argumentů“. V takovém případě se vraťte k používání smyčky.