Ich suche etwas wie:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Oder eine ähnliche Syntax.
Könnte auch an anderen Befehlen arbeiten, für die Sie eine individuelle Bestätigung wünschen.
quelle
Ich suche etwas wie:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Oder eine ähnliche Syntax.
Könnte auch an anderen Befehlen arbeiten, für die Sie eine individuelle Bestätigung wünschen.
Das macht was Sie suchen:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Dies wird find
eher verwendet als, ls
weil die Parsing- ls
Ausgabe im Allgemeinen unzuverlässig ist . Dieses Formular find
funktioniert 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 print0
teilt find
mit, 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 find
und Ihr Befehl auf diese angewendet.
Die -L1
Option sagt xargs
, dass immer nur ein Dateiname bearbeitet werden soll. Die -p
Option xargs
fordert Sie zur Genehmigung auf, bevor Sie fortfahren. Die -0
Option gibt xargs
an, dass das Nullzeichen als Trennzeichen zwischen den Dateinamen verwendet werden soll.
[Ich war mir der -p
Option nicht bewusst , xargs
bis @kwan darauf hingewiesen hat.]
find
Befehl 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.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 1
vor dem-type f
, als:find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.Sie können verwenden
xargs
.z.B:
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.quelle
xargs -p
so gut, dass ich sie kopieren werde.ls
.touch "a very long file name
und 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.