Antworten:
Das macht was Sie suchen:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Dies wird findeher verwendet als, lsweil die Parsing- lsAusgabe im Allgemeinen unzuverlässig ist . Dieses Formular findfunktioniert jedoch mit Dateinamen, auch wenn sie Zeilenumbrüche oder andere schwierige Zeichen enthalten.
Erläuterung
find . -maxdepth 1 -type f -print0
Dadurch werden die Dateien ausgewählt. Dies kann mit einer der vielen Optionen von find angepasst werden. Die Option print0teilt findmit, dass die Dateinamen in einer durch Null getrennten Liste gedruckt werden sollen. Dies ist die einzige zuverlässige Methode, um Listen mit Dateinamen zu übertragen.
xargs -L1 -p0 chmod +x
Dabei wird die durch Nullen getrennte Liste der von generierten Dateinamen verwendet findund Ihr Befehl auf diese angewendet.
Die -L1Option sagt xargs, dass immer nur ein Dateiname bearbeitet werden soll. Die -pOption xargsfordert Sie zur Genehmigung auf, bevor Sie fortfahren. Die -0Option gibt xargsan, dass das Nullzeichen als Trennzeichen zwischen den Dateinamen verwendet werden soll.
[Ich war mir der -pOption nicht bewusst , xargsbis @kwan darauf hingewiesen hat.]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.Also funktioniert es mit dem -maxdepth 1vor dem -type f, als:find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x .
Sie können verwenden xargs.
z.B:
ls|xargs -I path -p chmod +x path
Option -p: Fordern Sie den Benutzer auf, jede Befehlszeile auszuführen und eine Zeile vom Terminal zu lesen. Führen Sie die Befehlszeile nur aus, wenn die Antwort mit 'y' oder 'Y' beginnt.
xargs -pso gut, dass ich sie kopieren werde.
touch "a very long file nameund drücken Sie die Eingabetaste. Sehen Sie sich die Fortsetzung der Zeile an, geben Sie einfach das abschließende Anführungszeichen ein und drücken Sie erneut die Eingabetaste. tadaa, Zeilenumbruch im Dateinamen. Aus Faulheit, einen langen Dateinamen erneut einzugeben.
findBefehl POSIX kompatibel machen, indem Sie verwenden-exec printf '%s\0' {} +. Denken Sie jedoch nicht, dass es eine Möglichkeit gibt, das Ganze POSIX-kompatibel zu machen.