
Ich suche so etwas wie:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Oder ähnliche Syntax.
Könnte auch mit anderen Befehlen funktionieren, für die Sie eine individuelle Bestätigung wünschen.
Antwort1
Dies macht, was Sie suchen:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Dies verwendet find
, anstatt ls
weil, im Allgemeinen,Die Analyseausgabe ls
ist unzuverlässig. Diese Form mit find
funktioniert jedoch auch mit Dateinamen, die Zeilenumbrüche oder andere schwierige Zeichen enthalten.
Erläuterung
find . -maxdepth 1 -type f -print0
Dadurch werden die Dateien ausgewählt. Dies kann mit den zahlreichen Optionen von find angepasst werden. Die Option
print0
weist anfind
, die Dateinamen in einer durch Nullen getrennten Liste zu drucken. Dies ist die einzige zuverlässige Methode, um Listen mit Dateinamen zu übertragen.xargs -L1 -p0 chmod +x
Dies übernimmt die durch Nullen getrennte Liste der von Ihnen generierten Dateinamen
find
und wendet Ihren Befehl darauf an.
Die -L1
Option weist darauf hin, xargs
dass jeweils nur an einem Dateinamen gearbeitet werden soll. Die -p
Option weist darauf hin, xargs
dass vor dem Fortfahren eine Bestätigung angefordert werden soll. Die -0
Option weist darauf hin xargs
, dass als Trennzeichen zwischen Dateinamen das Nullzeichen verwendet werden soll.
[Ich war mir dieser -p
Option nicht bewusst xargs
, bis @kwan mich darauf hingewiesen hat.]
Antwort2
Sie können verwenden xargs
.
z.B:
ls|xargs -I path -p chmod +x path
Möglichkeit -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.