Î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).