În afară de faptul că
pentru fișier în $forall
va executa bucla o singură dată, cu $file setat la director /home/anastasia/Scripts, problema fundamentală este că
proprietar='ls -l $fișier | grep "^-" | awk {'printează $£3'}'
atribuie șirul literal ls -l $fișier | grep "^-" | awk {print la variabila proprietar (și apoi încearcă să execute $£3} ca o comandă).
Probabil ați vrut ca ghilimelele exterioare să fie înlocuirea comenzii backticks (si 3£ a fi simplu 3):
proprietar=`ls -l $fișier | grep "^-" | awk {'print $3'}`
oricum ar folosi modul modern $(...) in schimb:
proprietar=$(ls -l $fișier | grep "^-" | awk {'print $3'})
Cu toate acestea, aceasta este o modalitate groaznică de a găsi proprietarul unui fișier; in schimb as recomanda
proprietar=$(stat -c %U -- „$fișier”)
În afară de asta, nu uitați să citați expansiunile variabile, deci ceva de genul (netestat):
#!/bin/bash
forall=/home/anastasia/Scripts
pentru fișierul în „$forall”/*
do
if [ -d "$fișier" ]; atunci
continua
fi
if [ -e "$fișier" ]; atunci
proprietar=$(stat -c %U -- „$fișier”)
cp -n „$fișier” „$forall/$proprietar”/
chown „$owner” „$forall/$owner/$file”
fi
Terminat
Rețineți că ar trebui să puteți elimina chown prin adăugarea de opțiuni adecvate pentru cp (poate -p pentru a păstra modul, proprietatea, marcajele de timp).