데이터를 실행하고 수집한 다음 이 데이터를 다른 스크립트에 공급하는 여러 스크립트가 있습니다. 따라서 전체 체인이 자동화됩니다. 자동화 프로세스 중 어느 시점에서는 모든 데이터 파일이 패키지화되어 처리를 위해 전송됩니다. 내가 사용하는 명령은 다음과 같습니다.
tar -zchvf "$target_dir" -C "$data_dir" .
여기서 target_dir은 내 tarball의 위치이고 data_dir은 내 데이터의 위치입니다.
이제 모든 것이 잘 작동하지만 내 타르볼의 파일은 다음과 같습니다.
./file1
./file2
<etc>
사후 처리 스크립트는 이러한 파일의 선행 ./로 인해 엉망이 됩니다. 다음과 같을 것으로 예상됩니다.
file1
file2
<etc>
매뉴얼 페이지를 살펴봤지만 tar 프로세스에서 선행 ./를 제거하는 것에 대해 정말 인상 깊은 것은 없습니다. 내가 생각하고 있는 것 중 하나는 스크립트를 다음과 같이 변경하는 것입니다.
cd $data_dir; tar -zchvf "$target" *; cd -
그러나 이것은 나에게 매우 잘못된 느낌이고 나는 다른 어리석은 것을 놓치고 있다고 확신합니다.
참고용으로 bash v3.2.5를 사용하고 있습니다.
답변1
gnu tar를 사용하는 경우 tar를 입력하는 동안 파일 이름을 편집할 수 있습니다.
$ mkdir -p a/b
$ cd a
$ tar cf - --transform='s:^./::' . | tar tvf -
drwxr-xr-x 0 2018-07-24 18:18 ./
drwxr-xr-x 0 2018-07-24 18:18 b/
답변2
tar 1.15.1
2004-12-21에 게시된 의 문서 읽기https://www.gnu.org/software/tar/다운로드 링크와 포함은 다음을 tar.info
보장합니다.
6.3 파일에서 이름 읽기
[...]--files-from=FILE NAME' `-T FILE NAME' FILE NAME 파일에서 추출하거나 생성할 이름을 가져옵니다.
" "의 파일 이름 으로 대시를 전달하면
--files-from
(즉, "--files-from=-
" 또는 "-T -
" 지정) 파일 이름이 표준 입력에서 읽혀집니다.
이제 2003-04-02 ls
(coreutils
coreutil.info
coreutils-5.0
https://ftp.gnu.org/gnu/coreutils/), 다음보다 이전 tar 1.15.1
:
'
-A
'
' 은 ' ' 및 ' ' 을 제외한 디렉토리의 모든 파일을 나열합니다--almost-all
..
..
따라서 이는 예상대로 작동해야 합니다(대괄호 쌍은 잊어버리기 위해 존재하므로 이를 수행하거나 상관하지 않을 cd
수 있습니다 ).cd -
( cd "$data_dir" && ls -A | tar -zchvf "$target_file" -T - )