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                        
.
.
.

ベストアンサー1

おすすめ記事