Tar 원격 디렉토리, 파일 앞에 ./가 없습니다.

Tar 원격 디렉토리, 파일 앞에 ./가 없습니다.

데이터를 실행하고 수집한 다음 이 데이터를 다른 스크립트에 공급하는 여러 스크립트가 있습니다. 따라서 전체 체인이 자동화됩니다. 자동화 프로세스 중 어느 시점에서는 모든 데이터 파일이 패키지화되어 처리를 위해 전송됩니다. 내가 사용하는 명령은 다음과 같습니다.

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.12004-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(coreutilscoreutil.infocoreutils-5.0https://ftp.gnu.org/gnu/coreutils/), 다음보다 이전 tar 1.15.1:

' -A'
' 은 ' ' 및 ' ' 을 제외한 디렉토리의 모든 파일을 나열합니다 --almost-all.
...

따라서 이는 예상대로 작동해야 합니다(대괄호 쌍은 잊어버리기 위해 존재하므로 이를 수행하거나 상관하지 않을 cd수 있습니다 ).cd -

( cd "$data_dir" && ls -A | tar -zchvf "$target_file" -T - ) 

관련 정보