Bash를 사용하여 파일 이름 필터링

Bash를 사용하여 파일 이름 필터링

라이센스 조건을 준수하기 위해 임베디드 Linux 배포판의 LGPLv3 라이센스 소프트웨어 구성 요소를 제공하고 싶습니다. 저는 루트 파일 시스템을 구축하기 위해 Yocto를 사용하고 있습니다. 참조 매뉴얼에는아름다운 대본내가 사용하는 것은:

#!/bin/bash
src_release_dir="source-release"
mkdir -p $src_release_dir
for a in tmp-glibc/deploy/sources/*; do
        for d in $a/*; do
                # Get package name from path
                p=`basename $d`
                p=${p%-*}
                p=${p%-*}
                # Only archive GPL packages (update *GPL* regex for your license check)
                numfiles=`ls tmp-glibc/deploy/licenses/$p/*LGPLv3 2> /dev/null | wc -l`
                if [ $numfiles -gt 1 ]; then
                        echo Archiving $p
                        mkdir -p $src_release_dir/$p/source
                        cp $d/* $src_release_dir/$p/source 2> /dev/null
                        mkdir -p $src_release_dir/$p/license
                        cp tmp/deploy/licenses/$p/* $src_release_dir/$p/license 2> /dev/null
                fi
        done
done

문제는 이 스크립트를 사용하여 다음과 같은 파일을 감지할 수 없다는 것입니다.

~/build/build$ ls tmp-glibc/deploy/licenses/qtlocation/*LGPLv3
tmp-glibc/deploy/licenses/qtlocation/LICENSE.LGPLv3

돕다! ?

[고쳐 쓰다] 도움을 받아 일부 문제를 해결했습니다.shellcheck.net"에코"를 추가했습니다.

"if" 바로 앞:

#!/bin/bash
src_release_dir="source-release"
mkdir -p $src_release_dir
for a in tmp-glibc/deploy/sources/*; do
        for d in $a/*; do
                # Get package name from path
                p=$(basename "$d")
                p=${p%-*}
                p=${p%-*}
                # Only archive GPL packages (update *GPL* regex for your license check)
                numfiles=$(ls tmp-glibc/deploy/licenses/"$p"/*LGPLv3 2> /dev/null | wc -l)
                echo "$p"
                if [ "$numfiles" -gt 1 ]; then
                        echo Archiving "$p"
                        mkdir -p $src_release_dir/"$p"/source
                        cp "$d"/* $src_release_dir/"$p"/source 2> /dev/null
                        mkdir -p $src_release_dir/"$p"/license
                        cp tmp/deploy/licenses/"$p"/* $src_release_dir/"$p"/license 2> /dev/null
                fi
        done
done

나는 여기에서 이것을 실행합니다 :

$ ls
bitbake-cookerdaemon.log  downloads  lgpl.sh   source-release  sstate-cache  tmp-glibc

$ ls tmp-glibc/deploy/sources/
allarch-oe-linux  arm-oe-linux-gnueabi  x86_64-linux

산출:

 ./lgpl.sh                                                                                       
bt-enable                                                                                                                     
ca-certificates                                                                    
eth0-up                                                                               
iso-codes                                                                   
liberation-fonts                                                                 
linux-firmware                                                      
matrix-gui-apps-images                                                                                                          
matrix-gui-submenus                                                                                                                
os-release                                                                                                               
packagegroup-arago-tisdk-graphics                                                                                             
packagegroup-core-ssh-openssh                                                      
run-postinsts                        
.
.
.

관련 정보