.tar.gz
디렉토리에서 파일을 생성하는 방법을 찾고 있는데 몇 가지 질문이 있습니다. 파일을 생성하는 명령은 다음과 같습니다.
tar -zcvf /path/to/compressed/file.tar.gz /path/to/compress
그러면 하나를 얻을 수 있지만 file.tar.gz
이렇게 하면 원본 소스에 대한 경로가 유지됩니다. 이것이 내가 찾고 있는 것입니다:
- 로 압축해야 한다
.tar.gz
- 가능하다면 압축된 디렉터리의 경로는 유지되어서는 안 됩니다. 즉, 디렉터리와 그 내용만 압축하면 됩니다. 예를 들어 Windows에서 파일의 압축을 풀면
/path[folder]/to[folder]/compress[folder+content]
최신 파일만 원합니다 . 가능하다면 일부 디렉토리를 생략할 수 있나요? 예 나는
app/
내용이 다음과 같은 압축 폴더를 좋아합니다.drwxrwxr-x 6 ubuntu ubuntu 4096 Feb 24 14:48 ./ drwxr-xr-x 10 ubuntu ubuntu 4096 Feb 26 22:33 ../ -rw-rw-r-- 1 ubuntu ubuntu 141 Jan 29 06:07 AppCache.php -rw-rw-r-- 1 ubuntu ubuntu 2040 Feb 24 14:48 AppKernel.php -rw-rw-r-- 1 ubuntu ubuntu 267 Jan 29 06:07 autoload.php -rw-r--r-- 1 root root 94101 Feb 19 21:09 bootstrap.php.cache drwxrwxrwx 4 ubuntu ubuntu 4096 Feb 25 16:44 cache/ -rw-rw-r-- 1 ubuntu ubuntu 3958 Feb 24 14:48 check.php drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 24 14:48 config/ -rwxrwxr-x 1 ubuntu ubuntu 867 Jan 29 06:07 console* -rw-rw-r-- 1 ubuntu ubuntu 6148 Jan 29 06:07 .DS_Store -rw-rw-r-- 1 ubuntu ubuntu 143 Jan 29 06:07 .htaccess drwxrwxrwx 2 ubuntu ubuntu 4096 Feb 24 14:48 logs/ -rw-rw-r-- 1 ubuntu ubuntu 1118 Jan 29 06:07 phpunit.xml.dist drwxrwxr-x 5 ubuntu ubuntu 4096 Jan 29 06:07 Resources/ -rw-rw-r-- 1 ubuntu ubuntu 30404 Feb 24 14:48 SymfonyRequirements.php
cache/
그런데 디렉터리logs/
와 파일을 생략하고 싶은데bootstrap.php.cache
어떻게 해야 하나요? 그게 가능합니까?파일 이름에 현재 날짜(DD/MM/YYYY-H:M:S)를 추가해야 합니다. 어떻게 해야 합니까?
조언이나 도움을 받을 수 있나요? 이것을 Bash 스크립트에 추가하여 명령줄 대신 bash 스크립트로 실행하려고 합니다.
업데이트: 스크립트 내에서 테스트됨
다음과 같은@아리엘내 bash 스크립트에 다음 줄을 추가하라는 조언을 받았습니다.
read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME = "$filename-`date +%d-%m-%Y-%X`.tgz"
cd "$directory"
tar -zcvf /home/$FILENAME --exclude cache --exclude logs --exclude bootstrap.php.cache --exclude composer.lock --exclude vendor
하지만 다음 오류가 발생합니다.
Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: checkengine
/usr/local/bin/script-task: line 109: FILENAME: command not found
tar: Cowardly refusing to create an empty archive
왜 FILENAME
var가 아닌 명령으로 간주됩니까?문서설명하다?
업데이트 2: 여전히 전체 경로를 압축하는 중입니다.
사용자의 의견 덕분에 일부 문제를 해결했으며 스크립트의 줄은 다음과 같습니다.
read -e -p "Enter the directory to compress: " -i "/var/www/html/" directory
read -e -p "Enter the filename: " filename
FILENAME="$filename"-$(date +%d-%m-%Y-%T).tgz
cd "$directory/.."
tar -zcvf /home/$FILENAME "$directory" --exclude="*cache*" --exclude=logs --exclude=bootstrap.php.cache --exclude=composer.lock --exclude=vendor --exclude=.git
남은 유일한 문제는 zip 파일에 최종 디렉터리뿐만 아니라 전체 경로가 여전히 있다는 것입니다. 예를 들어:
Enter the directory to compress: /var/www/html/lynxoft/apps/checkengine/
Enter the filename: file
이로 인해 file-28-02-2015-17:44:32.tgz
압축 파일의 내용이 여전히 전체 경로를 가지게 됩니다 /var/www/html/lynxoft/apps/checkengine/
. 이유는 무엇입니까?
답변1
cd
타르볼 트리 구조를 시작하려는 폴더로 이동하여 상대 경로를 사용하세요 ! 예를 들어:
# Note, one folder above
cd /path/to/compress/..
# Tell tar to compress the relative path
tar -zcvf /path/to/compressed/file.tar.gz compress
압축을 풀면 compress
현재 작업 디렉터리에 폴더가 생성됩니다.
이 옵션을 사용하여 파일이나 폴더를 제외 --exclude <PATTERN>
하고 파일 이름에 날짜를 추가할 수 있습니다 date +FORMAT
. 예:
FILENAME="file-`date +%d-%m-%Y-%T`.tgz"
tar -zcvf /path/to/compressed/$FILENAME --exclude cache --exclude logs --exclude bootstrap.php.cache compress
답변2
이를 통해 다음을 gnu tar
사용할 수 있습니다.
--transform=EXPRESSION, --xform=EXPRESSION
Use sed replace EXPRESSION to transform file names.
이는 --xform='s|path/to/||'
경로에서 제거된다는 의미입니다.path/to/
--exclude=PATTERN
Exclude files matching PATTERN, a glob(3)-style wildcard pattern.
따라서 다음을 실행할 수 있습니다.
tar -zcvf /path/to/compressed/"$(date +%d-%m-%Y-%T)"-testdir.tar.gz \
--transform='s|^path/to/||' /path/to/compress \
--exclude='cache' --exclude='logs' --exclude='bootstrap.php.cache'
/
와 함께 사용되는 표현식에는 선행이 없습니다 xform
. 보다 일반적인 접근 방식:
--xform='s|^([^/]*/){2}||x'
이렇게 하면 경로의 처음 두 요소가 제거됩니다(필요한 경우 2를 다른 숫자로 대체).