.zshrc
私のホームディレクトリにあるすべての「ドットファイル」(fe)をバックアップしたいと思います。アスファルトただし、ディレクトリ構造とすべてのサブディレクトリは含まれません。
私は別のコマンドで何度も試しましたが、私が達成した最高のものは、隠されたディレクトリを含む$HOME
アーカイブを使用したことでした。
#!/bin/zsh
BACKUPFILE=dotfile_backup.tar.gz
tar --create --file=$HOME/$BACKUPFILE --auto-compress --no-recursion --exclude=. --exclude=.. --exclude=*/ --directory=$HOME .*
find
また、結果を使用してtarに送信することも検討しましたが、成功しませんでした。簡単に見えるこれを行う方法を知っている人はいますか?
PS:tarを使用してアーカイブを作成するときは、ほとんどの場合xkcd漫画を考慮する必要があります。
:)
ベストアンサー1
次のコマンドを使用して、ディレクトリ内のすべてのドットファイル(.<something>
)をバックアップできます$HOME
。
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
tarだけを使う正規表現?
方法1
私はこれについてかなり多くの研究を行いましたが、何も見つかりませんでした。制限要因は、tar
除外を実行するときに/
ディレクトリに表示される末尾のスラッシュ()が、tarがパターンマッチングを実行するときの方程式の一部ではないことです。
例は次のとおりです。
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
このバリエーションには、tarの詳細スイッチをオンにしてこれらのディレクトリが通過するのを見ることができる除外.*/
機能が含まれています。-v
方法#2
スイッチが人々の貪欲を解放してくれる--no-wildcards-match-slash
かもしれないと思っていましたが、それも効果がありませんでした。--wildcards-match-slash
.*/
除外項目からスラッシュを削除することも.*
オプションではありません。tar
これは、すべてのドットファイルとドットディレクトリを除外するように指示するためです。
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
方法#3(醜い!)
だから私が考えることができる唯一の他のオプションは次のとおりですtar
。
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
このアプローチの問題は、ファイル数がコマンドに引数を渡すための最大スペースを超えると顕著に現れます。もう一つは醜くて複雑すぎるということです。
それで私たちは何を学びましたか?
&正規表現を使ってこれを行う簡単でエレガントな方法はないようですtar
。 @terdonのコメントによると、find ... | tar ...
これは実際にはより適切なアプローチです。