このコマンドを使用.<something>
して、$HOME
ディレクトリ内のすべてのドットファイル()をバックアップできます。
$ cd ~
$ find . -maxdepth 1 -type f -name ".*" -exec tar zcvf dotfiles.tar.gz {} +
正規表現だけを使用してタール?
方法#1
私はこれをかなり調査し、空っぽになりました。制限要因tar
は、除外を実行するときに/
、ディレクトリで表示される末尾のスラッシュ()がtarがパターンマッチを実行するときの方程式の一部ではないことです。
以下に例を示します。
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*/'} .*
.qalculate/
.qt/
.qterm/
.qtoctave/
.RapidSVN
.RData
.Rhistory
このバリアントにはexcludeが含ま.*/
れており-v
、これらのディレクトリがそのexcludeを通過していることを示す詳細なスイッチをtarでオンにするとわかります。
方法#2
私は多分、スイッチを思った--no-wildcards-match-slash
か--wildcards-match-slash
の貪欲を緩和でしょう.*/
が、これはどちらかの効果がなかったです。
excludeからスラッシュを削除しても、すべてのdotfilesとdotdirectoriesを除外.*
するように指示さtar
れるため、オプションではありませんでした。
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --exclude={'.','..','.*'} .*
$
メソッド#3(Uい!)
だから、私が想像できる他の唯一の選択肢は、ファイルのリストをに提供することtar
です。このようなもの:
$ tar -v --create --file=do.tar.gz --auto-compress --no-recursion --wildcards-match-slash --exclude={'.','..','.*/'} $(ls -aF | grep -E "^\..*[^/]$")
.RapidSVN
.RData
.Rhistory
ファイルの数がコマンドに引数を渡すための最大容量を超える場合、このアプローチには問題があります。もう1つは、itくて過度に複雑なことです。
それで、私たちは何を学びましたか?
tar
正規表現を使用してこれを達成するための簡単でエレガントな方法はないようです。@terdonのコメントに関してfind ... | tar ...
は、これが実際により適切な方法です。