tarのBashスクリプト - 引用の問題

tarのBashスクリプト - 引用の問題

ファイル名を場所パラメーターとして使用するスクリプトがあります。私はそれらに対していくつかのことを行い、その後tarを実行します。現在、私のスクリプトは正しく動作しません。エコーラインはデバッグ目的で使用されます。

この声明を明確にしてください。

しかし、スクリプトでtarを使用しようとすると、tarしたいファイルをアーカイブできますか?

破片

while [[ $# > 0 ]]; do
    key="$1"
    shift
    files=$files" "\"${key}\"
 done

echo tar -cvf backup.tar $files
tar -cvf backup.tar $files

出力:

tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

空白のあるファイルを処理したいので、ファイル名(test.txt)の周りに二重引用符を使用しています。

スクリプトから引用符(\ ")を削除すると機能しますが、スペースを含むファイル名は処理できません。

どんなアイデアがありますか?

ベストアンサー1

常にすべてのパラメータを使用している場合は、tar次のように呼び出すだけですtar -cvf backup.tar "$@"。そうでなくサブセットを選択した場合(表示しませんが)、次のように配列でファイルのリストを作成します。

declare -a files
while [[ $# > 0 ]]; do
    key="$1"
    shift
    # assume some filtering goes on here
    files+=("$key")
 done

tar -cvf backup.tar "${files[@]}"

おすすめ記事