保存するアーカイブのファイル名を指定せずに、tarを使用してフォルダーを圧縮することは可能ですか?
通常は次を使用します:
tar -zcvf prog-1-jan-2005.tar.gz /home/jerry/prog
私は何かしたいです
tar -zcvf /home/jerry/prog
そしてそれがprog.tar.gzを作成するようにします
この方法でtar
を使用することはできません。または、パッチを適用する必要があります。
ファイルを渡さない場合(-f
オプション)、tar
はデフォルトで標準出力、つまり端末を使用し、端末への圧縮データの書き込みを拒否するため、最終的に失敗します。
したがって、tar
を適切な方法で呼び出す必要があります:tar -zcvf prog.tag.gz /home/jerry/prog
。
私の知る限り、それは不可能です。主な理由は、「宛先名」の引数が最初に来るからです。省略した場合、宛先引数の代わりに「source」引数が配置され、tarが混乱します。
作成するアーカイブ名がわからないスクリプトが必要な場合は、パスを解析して、tarコマンドに提供する名前を作成することを検討できます。
@Laurentの提案に基づいて、私はこのbashスクリプトを書きました:
#!/bin/bash
function isIn()
{
if [ -z "$1" ]; then
return
fi
for i in "${EXPECTED_ARGS[@]}"; do
if [ "$i" == "$1" ];then
return 1
fi
done
return 0
}
EXPECTED_ARGS=( 1 )
E_BADARGS=65
if isIn $# ; then
echo "Usage: $0 filepath"
exit $E_BADARGS
fi
FILEPATH=${1%/}
filename="${FILEPATH##*/}"
tar -zcvf "$filename.tar.gz" "$FILEPATH"
私はこれが初めてなので、何か問題があったら貢献してください。