2017-12-18 11 views
0

그래서 여러 개의 하위 폴더에 cat .html 파일을 저장하는 방법을 찾고 있습니다.Bash - 분리 된 하위 폴더에 파일 결합하기

실제 상황 :

$ Folder1 
. 
├── Subfolder1 
│ └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── File1.html 
    └── File2.html 

원하는 결과 :

$ Folder1 
. 
├── Subfolder1 
│ └── Mergedfile1.html 
    └── File1.html 
    └── File2.html 
├── Subfolder2 
│ └── Mergedfile2.html 
    └── File1.html 
    └── File2.html 

지금까지 나는이 함께했다했습니다

find . -type f -name *.html -exec cat {} + > Mergedfile.html 

을하지만이 모든의 모든 파일을 결합 Folder1의 하위 폴더를 분리하여 보관하려고합니다.

고맙습니다.

+0

나는 :)이 제한된 경우에 작동합니다 –

답변

0

처럼, 당신은 간부와 함께 찾을 수 있습니다.

find Folder1/ -mindepth 1 -maxdepth 1 -type d -exec sh -c "rep='{}';cat "'"$rep"'"/*.html > "'"$rep"'"/Mergedfile.html" \; 
+0

'{} '그렇게! 그것은 위험하고'find '의 모든 버전에서 작동하지 않을 것입니다. 위험합니다 :' '라는 파일이 있다면 어떻게 될까요; rm -rf/#'? POSIX는 [utility_name 또는 인수 문자열에 두 문자 "{}"가 포함되어 있지만 "{}"두 문자가 아니라면 find가 해당 두 문자를 대체하는지 또는 변경없이 문자열을 사용하는지 여부에 따라 구현 정의됩니다.] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). 그래서'{}'의 사용은 위험하고 정확하지 않습니다. –

+0

이것은 완벽하게 작동했습니다! Justed는 또 다른 명령을 실행하여 하위 폴더 이름 afterwars를 추가합니다. 감사합니다. @ctac_! – Hugo

1

당신은 for 문을 모든 하위 폴더에 루프 할 수 있습니다 AK_에 의해 말

for i in Folder1/SubFolder*; do 
    cat "$i"/File*.html > MergeFile$(echo "$i" | sed 's,.*\([0-9]\+\)$,\1,').html 
done 
+0

지 않은 변수,하지만 코드는 일반적인 코너 경우에 작동하기 위해서는 당신이 원하는 것은'당신'find' 명령에 -maxdepth 1 타입 d' 생각 , 큰 따옴표로 묶은 파일 이름을 포함하는 변수를 항상 * 인용해야합니다. https://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-shell-variable – tripleee

+0

당신 말이 맞아요 ... 내 글을 편집했습니다. – oliv