Szukam czegoś takiego:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Lub podobna składnia.
Może również działać na innych poleceniach, dla których chcesz uzyskać indywidualne potwierdzenie.
źródło
Szukam czegoś takiego:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Lub podobna składnia.
Może również działać na innych poleceniach, dla których chcesz uzyskać indywidualne potwierdzenie.
Robi to, czego szukasz:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
To używa find
raczej niż ls
dlatego, że generalnie parsowanie ls
danych wyjściowych jest zawodne . find
Jednak ten formularz będzie działał z nazwami plików, nawet jeśli zawierają one nowe wiersze lub inne trudne znaki.
Wyjaśnienie
find . -maxdepth 1 -type f -print0
To wybiera pliki. Można to dostosować za pomocą dowolnej z wielu opcji find. Ta opcja print0
nakazuje find
wydrukowanie nazw plików na liście rozdzielonej znakiem null. Jest to jedyny niezawodny sposób przesyłania list nazw plików.
xargs -L1 -p0 chmod +x
Spowoduje to pobranie rozdzielonej wartościami zerowymi listy nazw plików wygenerowanych przez find
i zastosowanie do nich polecenia.
-L1
Opcja mówi xargs
do pracy na jednym tylko nazwy pliku naraz. Ta -p
opcja nakazuje xargs
monit o zatwierdzenie przed kontynuowaniem. Ta -0
opcja mówi xargs
o użyciu znaku null jako separatora między nazwami plików.
[Nie wiedziałem o -p
możliwości, xargs
dopóki @kwan tego nie wskazał.]
find
polecenie POSIX kompatybilnym, używając-exec printf '%s\0' {} +
. Nie sądzę jednak, aby istniał sposób na kompatybilność z POSIX.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.
Tak to działa z-maxdepth 1
przed-type f
, jak:find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.Możesz użyć
xargs
.na przykład:
Opcja
-p
: Zapytaj użytkownika, czy uruchomić każdy wiersz poleceń i odczytać wiersz z terminala. Uruchom wiersz polecenia tylko wtedy, gdy odpowiedź zaczyna się od „y” lub „Y”.źródło
xargs -p
tak bardzo, że go skopiuję.ls
.touch "a very long file name
i naciśnij enter. Zobacz kontynuację linii i po prostu wpisz cytat zamykający i ponownie naciśnij enter. tadaa, nowa linia w nazwie pliku. Z lenistwa, aby przepisać długą nazwę pliku.