이 명령을 사용 .<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
이 변형에는 제외가 포함되어 있으며 .*/
verbose 스위치를 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 ...
작업을 수행하는 가장 적합한 방법입니다.