Как заставить туалет интерпретировать стандарт в как список файлов

Была операционная система, Вы использование?

Я собираюсь принять Linux. Попробуйте что-то вроде этого:

ls *.c *.h */*.c */*.h | xargs svn cl source

Это добавит весь C и заголовочные файлы в текущих и непосредственных подкаталогах к changelist источнику. Вышеупомянутая команда может испытать затруднения из-за пробела в именах файлов. Для чего-то более сложного примерьте это для размера:

find . -name .svn -type d -prune -o -type f -print0 | xargs -0 svn cl source

Это добавит все нормальные файлы, не расположенные в соответствии с .svn каталогами к changelist источнику. Это также работает с пробелом в именах файлов.

4
26.10.2012, 17:52
3 ответа

Использовать find в сочетании с xargs. Единственная причина я рекомендую find должен использовать в своих интересах -print0 опция, которая разделяет имена файлов NULs; это помогает избежать проблем с именами файлов, содержащими пробелы.

find .  -maxdepth 1 -type f -print0 | xargs -0 wc
6
27.01.2020, 20:50
  • 1
    Вход может прибывать из файла, но я должен смочь передать путь для каждого к оператору находки, таким образом, это должно все еще работать.Спасибо! –  TTT 26.10.2012, 18:46
  • 2
    @TTT важный бит xargs. Вам не нужна находка, находка была только вместо Вашего ls (с дополнительной функцией-print0). Проверьте xargs страницу справочника, необходимо будет сказать ей формат файла. –  derobert 26.10.2012, 19:26

Если Вы хотите взять вывод команды и использовать его в качестве входного списка файлов к wc, Вы могли, вероятно, сделать что-то вроде этого:

wc $(ls JP*/std*)

Это работает ls JP*/std* и его вывод передается как аргументы wc.

xargs могло бы также быть полезно для Вас здесь:

ls JP*/std* | xargs wc

Посмотрите xargs страница справочника для большего количества детали о том, как это может использоваться, поскольку это довольно гибко.

2
27.01.2020, 20:50

После чтения Вашего комментария

Вход может прибывать из файла,

Если список файлов уже находится на файле, Вы имеете, можно просто пропустить часть находки и использовать просто xargs часть.

Посмотрите xargs страница справочника.

Использовать -a опция xargs передать имя файла файла, где список - это xargs должен читать.

Если имена файлов в списке не являются полным именем файла и просто передающий это wc недостаточно, потому что нет никакого каталога, можно отредактировать файл, так, чтобы полный путь был включен (необходимо смочь сделать это без вручную редактирования он, при помощи sed или awk или подобный).

Или можно использовать механизм строки замены в xargs (-I опция в xargs) (обратите внимание на это при использовании этого последнего метода, с -I замена, каждая строка вызовет различную программу и что существуют некоторые ограничения на максимальную длину - см. страницу справочника для деталей),

Если Ваш вход прибывает из файла (и следовательно Вы не можете использовать механизм, обеспеченный -0 опция xargs), необходимо обратить большое внимание, если существует пространство или другие странные символы в имени файла. Если существуете Вы, должен найти способ избежать некоторого неожиданного результата.

Например, если у Вас есть файл, названный "мой document.txt", и в Вашем списке записан как

my document.txt

и затем это передается как он, записан в файле, Вы получили бы это, что это выполняется,

wc my document.txt

и это привело бы к wc программа ища два файла, один названный мой и один именованный document.txt

Необходимо быть уверены, что то, что передается, является чем-то как

wc "my document.txt"

или

wc my\ document.txt

(Первый путь может быть легче, если Вы уже используете механизм замены, второй, если Вы уже редактируете свой файл.)

Ну, если Вы можете, возможно, быть просто легче отредактировать входной файл так, чтобы каждый объект был разделен нулевым символом и использованием -0 опция xargs.

0
27.01.2020, 20:50

Теги

Похожие вопросы