Обычные методы:
ls * | while read file; do data "$file"; done
for file in *; do data "$file"; done
Второй может столкнуться с проблемами, если у вас есть пробел в именах файлов; в этом случае вы, вероятно, захотите убедиться, что он работает в подоболочке, и установите IFS:
( IFS=$'\n'; for file in *; do data "$file"; done )
Вы можете легко обернуть первый в скрипте:
#!/bin/bash
# map.bash
while read file; do
"$1" "$file"
done
, которое может быть выполнено так, как вы просили - просто будьте осторожны, чтобы случайно не выполнить ничего глупого. Преимущество использования зацикливающей конструкции состоит в том, что вы можете легко разместить несколько команд внутри нее как часть одной строки, в отличие от xargs, где вам нужно будет поместить их в исполняемый скрипт для его запуска.
Конечно, вы также можете просто использовать утилиту xargs
:
find -maxdepth 0 * | xargs -n 1 data
Обратите внимание, что вы должны убедиться, что индикаторы выключены (ls --indicator-style=none
), если вы обычно их используете, или @
, добавленный к символическим ссылкам, превратит их в несуществующие имена файлов.