Я пытаюсь вызвать встроенную функцию find
, чтобы распечатать содержимое всех текстовых файлов в подпапке my-files. Я понимаю, что есть более простые способы сделать это, но мне нужно, чтобы это работало с exec. Я подозреваю, что exec неправильно обрабатывает кавычки. Мой исходный код выглядит следующим образом:
fullCmd := "find my-files -maxdepth 1 -type f"
cmdParts := strings.Split(fullCmd, " ")
output, _ := exec.Command(cmdParts[0], cmdParts[1:]...).CombinedOutput()
fmt.Println("Output is...")
fmt.Println(string(output))
Это отлично работает и печатает
Output is...
my-files/goodbye.txt
my-files/badfile.java
my-files/hello.txt
Однако, когда я тогда пытаюсь начать добавлять «более странные» символы, он разваливается. Если я изменю первую строку на
fullCmd := "find my-files -maxdepth 1 -type f -iname \"*.txt\""
Ничего не печатается. Хуже, если я изменю строку на:
fullCmd := "find my-files -maxdepth 1 -type f -exec cat {} \\;"
Поиск ошибок с этим stdout:
Output is...
find: -exec: no terminating ";" or "+"
Я думал, что правильно избегаю необходимых персонажей, но, думаю, нет. Любые идеи о том, как заставить команду работать? Для справки, эта команда делает именно то, что я хочу, когда вводится непосредственно в командной строке:
find my-files -maxdepth 1 -type f -iname "*.txt" -exec cat {} \;