Bashスクリプトの7zはディレクトリを除外しません。

Bashスクリプトの7zはディレクトリを除外しません。

私は7z(またはbash、まだわかりません)でやや奇妙な動作を経験しました。次のスクリプトを使用します。

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command

さらに、最後の2行は1行に簡単に置き換えることができます。

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

私も次のことを試しました。

command="/usr/bin/7z a  $lst1  -v2048M arch0.7z /home/dh ;"

"arch0.7z"ファイルを受け取りましたが、.configフォルダと.cacheフォルダは次のように含まれています。

#!/bin/bash
find /home/user  -type f -name "*.pdf" | cut -c 10- > /home/user/exclude_list2.lst;
/usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user ;"

正しく除外されたフォルダを含むファイルを作成します。

だから私は変数で拡張行の違いが何であるか疑問に思います。

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

私が入力した内容は次のとおりです。

 /usr/bin/7z a -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' -v2048M arch0.7z /home/user

7zワークフローにこのような大きな変化が生じた理由はありますか?

ベストアンサー1

あなたのオリジナルフォーム

command=$(/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user);
$command

$command含むという意味でしょう出力7zip 実行の一部として、var=$(...)コマンド出力が変数に保存されます。

だから、

/usr/bin/7z a $lst1 -v2048M arch0.7z /home/user

交換ではなく、スクリプトエラーの修正です。

とにかく、本当の問題を直視してみよう。

シェルで変数の割り当てを実行すると、次のことを確認できます。

$ lst1=" -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' "
-bash: !'*.config/*': event not found

"..."したがって、二重引用符を使用すると、シェルは変数置換などを実行するため、この行にエラーがあります。問題のエントリは、!bashがこのエントリを使用して履歴内の前のコマンドを参照するためです。代わりに一重引用符を使用してください。'...'

$ lst1=' -x@/home/user/exclude_list2.lst -xr!'*.config/*' -xr!'*.cache/*' '
$ echo $lst1
-x@/home/user/exclude_list2.lst -xr!*.config/* -xr!*.cache/*

おすすめ記事