Как я конкатенирую, файлы в подкаталоге с Unix находят, выполняются и кошка в единственный файл?

В синхронном программировании монитор может рассматриваться как блок или, более конкретно, блок управления (для внесения каких-либо изменений в объект) с пространством только одного потока в любой данный момент. Таким образом, нескольким потокам можно запретить одновременную запись одного объекта и защиту объекта от повреждения. В нем метод wait () сообщает потоку, если какой-либо другой поток уже находится на мониторе, и, если это так, сообщает вызывающему потоку WAIT для выхода другого потока. Или, технически, сообщает вызывающему потоку SLEEP, пока не получит уведомление.

Он останавливает любое дальнейшее выполнение кода в вызывающем потоке, в отличие от бесконечного цикла, в котором выполнение продолжается, но никакого кода после цикла не выполняется, пока цикл не прервется.

9
задан Kev 4 October 2008 в 04:28
поделиться

8 ответов

находка - исполнительный аргумент выполняет команду, которую Вы указываете однажды для каждого файла, который это находит. Попробуйте:

$ find . -type f -exec cat {} \; > out.txt

или:

$ find . -type f | xargs cat > out.txt

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

$ find . -type f -print0 | xargs -0 cat > out.txt
28
ответ дан 4 December 2019 в 06:23
поделиться

Вы могли сделать что-то вроде этого:

$ cat `find . -type f` > out.txt
3
ответ дан 4 December 2019 в 06:23
поделиться

Хм... найдите, кажется, рекурсивно вызывает, поскольку Вы производите out.txt к текущему каталогу

Попробуйте что-то как

find . -type f -exec cat {} \; > ../out.txt
5
ответ дан 4 December 2019 в 06:23
поделиться

Как насчет того, чтобы просто перенаправить вывод находки в файл, так как все, что Вы желаете сделать, является кошкой все файлы в один большой файл:

find . -type f -exec cat {} \; > /tmp/out.txt
2
ответ дан 4 December 2019 в 06:23
поделиться

Возможно, Вы вывели из других ответов что > символ интерпретируется оболочкой, прежде чем найдут, получает его как аргумент. Но ответить Ваш, "почему не" позволяет взгляду на Вашу команду, которая является:

$ find . -type f -exec cat > out.txt {} \;

Таким образом, Вы даете find эти аргументы: "." "-type" "f" "-exec" "cat" Вы даете перенаправлению эти аргументы: "out.txt" "{}" и ";". Это путает find не завершаясь -exec споры с точкой с запятой и не используя имя файла в качестве аргумента (" {} "), это возможно путает перенаправление также.

Рассмотрение других предложений, необходимо действительно постараться не создавать вывод в том же каталоге, в котором Вы находите. Но они работали бы с этим в памяти. И -print0 | xargs -0 комбинация значительно полезна. То, что Вы хотели ввести, вероятно, больше было похоже:

$ find . -type f -exec cat \{} \; > /tmp/out.txt

Теперь, если у Вас действительно только есть один уровень подкаталогов и только нормальных файлов, можно сделать что-то глупое и простое как это:

cat `ls -p|sed 's/\/$/\/*/'` > /tmp/out.txt

Который добирается ls перечислять все Ваше добавление файлов и каталогов '/' к каталогам, в то время как sed добавит a '*' к каталогам. Оболочка затем интерпретирует этот список и развернет шарики. Принятие этого не приводит к слишком многим файлам для оболочки для обработки, они будут все переданы как аргументы кошке, и вывод будет записан в out.txt.

1
ответ дан 4 December 2019 в 06:23
поделиться

Попробуйте это:

(find . -type f -exec cat {} \;) > out.txt 
0
ответ дан 4 December 2019 в 06:23
поделиться

Или просто не учтите находку, которая бесполезна, если Вы используете действительно большую оболочку Z (zsh), и можно сделать это:

setopt extendedglob

(это должно быть в Вашем .zshrc) Затем:

cat **/*(.) > outfile 

просто работы :-)

0
ответ дан 4 December 2019 в 06:23
поделиться

В ударе Вы могли сделать

cat $(find . -type f) > out.txt

с $ () можно получить вывод от команды и передать его другому

0
ответ дан 4 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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