Выполнить команду с параметром каждое имя файла в папке

868
ddmichael

Я хотел бы выполнить команду, давайте назовем ее abc и добавим в качестве параметра каждое имя файла в текущей папке. Как я мог сделать это в C Shell (или другом языке сценариев)?

0
Возможно, вы можете сделать просто `abc *`? Если нет, объясните более точно, что вы хотите. Daniel Andersson 11 лет назад 0

2 ответа на вопрос

1
Nicole Hamilton

Using csh or tcsh, this would iterate over all the files and directories in the current directory. I've used quotes around the $i variable substitution in case some of the names have spaces.

foreach i (*) abc "$i" end 

If you'd like to get only the files, not the directories, use the -f test. Here I've used the C shell's short-form if statement.

foreach i (*) if (-f "$i") abc "$i" end 
0
kmort

Look up xargs. If your shell is anything like mine, the following should work nicely:

find . -type f -maxdepth 1 | xargs abc 

If you are concerned about spaces in the file names, see Daniel Andersson's comment below.

Это также даст все файлы в подкаталогах. Он также выдаст все каталоги, хотя в вопросе указываются «файлы» (но это может быть непонятно для спрашивающего). Он также будет разбит на каждое имя файла, содержащее пробел. найти. -maxdepth 1 -mindepth 1 -тип f -print0 | xargs -0 abc` или `найти. -maxdepth 1 -mindepth 1 -type f -exec abc {} + `исправит эти моменты. Daniel Andersson 11 лет назад 0
@DanielAndersson Все действительные комментарии ... Я немного обновил свой ответ. Я не могу вспомнить, когда в последний раз я видел пробел в имени файла в системе * nix. :-) kmort 11 лет назад 0
@kmort Я согласен, что имена файлов с пробелами в системе Linux встречаются редко, но если вы публикуете ответ, который не учитывает возможность (или, по крайней мере, указывает на то, что он потерпит неудачу, если есть пробелы), кто-то наверняка подпишется на вас здесь на сайте суперпользователя. Это просто так, как здесь. Nicole Hamilton 11 лет назад 0