web-dev-qa-db-ja.com

ファイル名を指定せずにフォルダを圧縮します

保存するアーカイブのファイル名を指定せずに、tarを使用してフォルダーを圧縮することは可能ですか?

通常は次を使用します:

tar -zcvf prog-1-jan-2005.tar.gz /home/jerry/prog

私は何かしたいです

tar -zcvf /home/jerry/prog

そしてそれがprog.tar.gzを作成するようにします

5
Mark Robinson

この方法でtarを使用することはできません。または、パッチを適用する必要があります。

ファイルを渡さない場合(-fオプション)、tarはデフォルトで標準出力、つまり端末を使用し、端末への圧縮データの書き込みを拒否するため、最終的に失敗します。

したがって、tarを適切な方法で呼び出す必要があります:tar -zcvf prog.tag.gz /home/jerry/prog

4
lgeorget

私の知る限り、それは不可能です。主な理由は、「宛先名」の引数が最初に来るからです。省略した場合、宛先引数の代わりに「source」引数が配置され、tarが混乱します。

作成するアーカイブ名がわからないスクリプトが必要な場合は、パスを解析して、tarコマンドに提供する名前を作成することを検討できます。

2
Laurent C.

@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"

私はこれが初めてなので、何か問題があったら貢献してください。

0
Mark Robinson