Gibt es einen Einzeilenbefehl, um chmod interaktiv zu machen?

Gibt es einen Einzeilenbefehl, um chmod interaktiv zu machen?

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 lsweil, im Allgemeinen,Die Analyseausgabe lsist unzuverlässig. Diese Form mit findfunktioniert 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 print0weist an find, 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 findund wendet Ihren Befehl darauf an.

Die -L1Option weist darauf hin, xargsdass jeweils nur an einem Dateinamen gearbeitet werden soll. Die -pOption weist darauf hin, xargsdass vor dem Fortfahren eine Bestätigung angefordert werden soll. Die -0Option weist darauf hin xargs, dass als Trennzeichen zwischen Dateinamen das Nullzeichen verwendet werden soll.

[Ich war mir dieser -pOption 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.

verwandte Informationen