рекурсивный поиск файлов *.c для обработки dos2unix

Вам нужно прослушивать этот порт, чтобы иметь возможность подключиться к нему. Для простого тестирования вы можете использовать ncили netcat:

.
nc -l -p 9999

Теперь ncпрослушивает порт 9999, и вы можете telnetподключиться к этому порту с другого терминала (или машины ):

.
$ telnet localhost 9999
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

После подключения вы можете ввести данные в одном терминале, а после нажатия Enter текст должен появиться на другом терминале.

0
28.01.2020, 19:25
2 ответа

Когда вы ищете подстановочный знак (, например, *.c), вам действительно следует заключать его в одинарные кавычки. Когда вы переместились на один каталог вверх, я предполагаю, что вы вошли в каталог как минимум с двумя файлами, оканчивающимися на .c, один из которых был random.c. В этом случае bash расширил *.cдо соответствующих файлов.

Предположим, что каталог содержит hi.cи random.c, тогда

find. -name *.c

Становится:

find. -name hi.c random.c

Включение *.cв одинарные кавычки приведет к тому, что оболочка не будет раскрывать его.

Чтобы найти каждый .cфайл в ~/csimи обработать с помощьюdos2unix:

find ~/csim -type f -name '*.c' | xargs dos2unix -f

5
28.04.2021, 23:25

Добавлено еще одно пояснение к рассказу @Andy's.

Обычно команде findтребуется имя файла или шаблон в качестве аргумента (заполнителя )для опции -name.

при попытке запустить echo *.cв каталоге, содержащем один или несколько файлов .c, результатом будут имена этих файлов, разделенные пробелом -, например

$echo *.c
abc.c bcd.c

Если в каталоге нет .cфайлов, результат должен быть

$echo *.c
*.c

Аналогичным образом find. -name *.cв каталоге, содержащем более 1 .cфайла, *.cв findзаменяется именами всех .cфайлов, присутствующих в этом каталоге (*..c раскрывается как несколько аргументов. опции-name). Это должно быть что-то вроде этого, find. -name abc.c bcd.c. Здесь ошибка, которую вы получаете, возникает, когда find начинает поиск bcd.cпосле успешного поиска abc.c, потому что -nameпринимает только один аргумент. (если есть только 1 .cто записывается как результат, поиск в подкаталогах -больше не происходит)

Но когда в каталоге нет .cфайлов, фактическое значение *в *.cсохраняется.

Итак, когда вы были в ~/csim/exerciseи пытались использовать findдля поиска всех *.c, я думаю, что в каталоге, где была запущена команда find, не было файлов *.c. именно поэтому значение подстановочного знака *в *.cсохраняется, и поиск в подкаталогах -становится успешным. После cd..поиск не увенчался успехом, поскольку я подозреваю, что ~/csim/имеет более 1 *.cфайлов.

Решение намного проще, достаточно экранирования подстановочного знака. Используйте любой из этого.

find.  -name '*.c'
or
find.  -name \*.c
or
find.  -name "*.c"
1
28.04.2021, 23:25

Теги

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