Відповіді:
Це робить те, що ви шукаєте:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Це використовується find
скоріше, ніж ls
тому, що, як правило, аналіз ls
результатів аналізу недостовірний . Ця форма, використовуючи find
, однак, буде працювати з іменами, навіть якщо вони містять нові рядки або інші складні символи.
Пояснення
find . -maxdepth 1 -type f -print0
Це вибирає файли. Це можна налаштувати за допомогою будь-якого з багатьох варіантів пошуку. Опція print0
повідомляє find
про друк імен файлів у списку, розділеному нулем. Це єдиний надійний для передачі списки імен файлів.
xargs -L1 -p0 chmod +x
Це займає розділений нулем список імен файлів, згенерованих find
і застосовує до них вашу команду.
Цей -L1
параметр повідомляє, що xargs
можна працювати лише над одним ім'ям файлу одночасно. -p
Параметр вказує xargs
на запит на твердження , перш ніж продовжити. -0
Опція вказує xargs
використовувати нульовий символ в якості роздільника між іменами файлів.
[Мені не було відомо про -p
варіант, xargs
поки @kwan не вказав на це.]
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.
так що працює з -maxdepth 1
до -type f
, як: find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.
Можна використовувати xargs
.
наприклад:
ls|xargs -I path -p chmod +x path
Варіант -p
: Попросіть користувача про те, чи потрібно запускати кожен командний рядок і читати рядок з терміналу. Запускайте командний рядок лише у тому випадку, якщо відповідь починається з 'у' або 'Y'.
xargs -p
що я скопіюю його.
touch "a very long file name
і натисніть клавішу Enter. Дивіться продовження рядка та просто введіть кінцеву пропозицію та натисніть клавішу enter ще раз. тада, новий рядок у назві файлу. З ліні вводити довге ім’я файлу.
find
команду POSIX сумісною за допомогою-exec printf '%s\0' {} +
. Не думайте, що існує якийсь спосіб зробити всю POSIX сумісною.