Ich habe versucht, ein Skript zu schreiben, für die Berechtigungen in Linux zu normalisieren:Ich kann nicht scheinen Argumente mit Leerzeichen in Bash-Skript zu übergeben
for f in $(find . -type f); do
file "$f" | grep -e "ELF 64-bit LSB executable" -e "ELF 32-bit MSB executable" > /dev/null
if [ $? = 0 ]; then
chmod -c u=rwx,g=rx,o=rx "$f"
else
chmod -c u=rw,g=r,o=r "$f"
fi;
done
Offensichtlich Ich versuche, Dateipfade zu chmod
und ich passiere sind doppelte Anführungszeichen wie in "$f"
verwenden, aber irgendwie noch No such file or directory
Fehler bekommen:
chmod: './FreeDesktop_integration/nautilus-scripts/Archiving/PeaZip/Extract''e erişilemedi: Böyle bir dosya ya da dizin yok
chmod: 'Archive''e erişilemedi: Böyle bir dosya ya da dizin yok
Es scheint ./FreeDesktop_integration/nautilus-scripts/Archiving/PeaZip/Extract Archive
als 2 Dateien von chmod
behandelt wird (und das ist ziemlich unerwartet).
Also, was verursacht das und wie löse ich das (passiere die Argumente richtig)?
Bonus Frage: Gibt es einen besseren Weg zu tun, was ich mit dem Skript erreichen möchte?
des Lesen von einer Schwester Website, super detailliert: https://unix.stackexchange.com/questions/9496/looping-through-files-with-spaces-in-the-names – Nic3500
Dies ist [BashPitfalls # 1] (http: //mywiki.wooledge .org/BashPitfalls # for_i_in_.24.28ls_.2A.mp3.29); auch das Thema [Using Find] (http://mywiki.wooledge.org/UsingFind) und * zahlreiche * Duples hier auf SO (kein Hinweis auf unix.se)! –
@CharlesDuffy Nun, vielen Dank für die heads-up, aber ich sehe nicht, warum diese Frage downvoted -cuz ich nicht Shell-Skripting? – NightmareX1337