2012-03-22 3 views
0

В моей основной папке у меня есть несколько подпапок, и каждая подпапка содержит несколько файлов. Я хочу объединить эти файлы в каждую подпапку.Слияние файлов (cat) в каждой папке Unix

Так что я пытаюсь сделать что-то вроде этого:

cd ../master-folder 

for file in $(find . -name "*.txt"); 
do 
cat "all the text files in this sub folder" > "name of the subfolder.txt" 
rm "all the previous text files excluding the merged output obviously" 
    done 

Цените помощь! Спасибо.

+0

Является ли порядок добавления важным? – paul

+0

попробуйте рекурсивную найти с помощью -exec. это займет некоторое ускорение вуду, но, вероятно, это выполнимо –

+0

Порядок не важен. – dawnoflife

ответ

2

Я хотел бы сделать это так, если порядок файлов не имеет значения:

for i in $(find -maxdepth 1 -mindepth 1 -type d) 
do 
    find $i -name '*.txt' -type f -exec cat {} >> $i-list.txt \; 
    find $i -name '*.txt' -type f -exec rm {} \; 
done 

Первая находка ищет подкаталоги.

Вторая добавляет содержимое всех субфайловое в файл

Третий удаляет с подфайлами.

Это не работает, если существуют рекурсивные подкаталоги. Если вы хотите это, удалите '-maxdepth 1'

+0

Будет ли '$ i-list' включать путь в имени? – dawnoflife

+0

Это дает мне «отсутствующий аргумент ошибки' -exec'. – dawnoflife

+0

Он будет содержать имя каталога плюс -list.txt. Что вы подразумеваете под этим путем? Только об этом, если вы используете рекурсивный метод, txt-файл будет в родительском каталоге указанного каталога – paul

2

Почему бы не посетить каждую директорию рекурсивно? Что-то вдоль линий:

#!/bin/bash                  

shopt -s nullglob # Make failed globs expand to nothing 

function visit { 
    pushd "$1" 
    txts=(*.txt) 
    if ((${#txts[@]} > 0)) 
    then 
     cat "${txts[@]}" > "${PWD##*/}.txt" 
     rm -f "${txts[@]}" 
    fi 
    for dir in */ 
    do 
     visit "$dir" 
    done 
    popd 
} 

visit /path/to/start/dir 

Предостережение: Если у вас есть SYM ссылки, которые создают циклы в дереве каталогов, то это плохая идея.

Смежные вопросы