파일, 하위 디렉터리 및 기호 링크가 포함된 디렉터리가 있습니다.
지퍼로 잠그는 방법오직해당 디렉터리에 심볼릭 링크된 파일과 폴더가 없거나 심볼릭 링크에서 참조하는 파일이 없습니까?
답변1
"zip -y" 옵션을 사용하면 전체 파일이 아닌 링크를 있는 그대로 복사합니다.
답변2
다음을 사용할 수 있습니다 @exclude_file
. 심볼릭 링크와 해당 대상 경로1를 텍스트 파일 에 저장한 다음 디렉터리를 압축하고 해당 파일을 사용하여 해당 경로를 제외합니다.
find /full/path/to/dir -type l -print -exec readlink -f {} \; > exclude.lst
zip -r myarchive /full/path/to/dir [email protected]
1: 파일 이름이 정상이라고 가정합니다.
답변3
Zip 3.0(2008년 7월 5일)은 심볼릭 링크 저장을 지원한다고 주장하지만 -y
Ubuntu 20.04에서 이 옵션을 사용하면 아카이브에 포함되지 않은 파일 참조에 대해 심볼릭 링크가 제외되는 것으로 보입니다. 귀하의 옵션은 다음과 같습니다.
-y
실제 파일을 사용하거나 포함하지 마세요.gzip
예를 들어 tar를 사용하십시오 .tar -czvf archive.tar.gz files_to_include
답변4
더 많은 명령을 사용하여 보다 적절한 필터를 사용할 수 있으며, bash 배열을 사용하여 목록 파일 생성을 피할 수 있습니다.
다음 스크립트는 모든 작업을 한 번에 수행합니다. 다음은 포함되지 않습니다.
- 파일에 대한 심볼릭 링크
- 파일이 포함된 폴더에 대한 심볼릭 링크
- 심볼릭 링크만 포함된 실제 폴더
while read -r symlink ; do
excluded+=("${symlink}")
target="$(readlink "${symlink}")"
if [[ -d "${target}" ]] ; then
excluded+=("${symlink}*")
fi
done <<< "$(find . -type l)"
while read -r dir ; do
file_count="$(find "$dir" -type f | wc -l)"
if [[ "${file_count}" -eq 0 ]] ; then
excluded+=("${dir}*")
fi
done <<< "$(find . -type d)"
zip -r "./archive.zip" "/directory/to/archive/" -x "${excluded[@]}"
2 while 루프는 zip에 제공되는 "제외" 배열에 경로를 추가합니다.
- 첫 번째는 모든 기호 링크(파일 또는 폴더를 가리키는)를 추가합니다.
- 두 번째는 파일 없이 실제 폴더를 추가합니다(심볼릭 링크는 파일로 간주되지 않음).
노트:제 경우에는 파일 이름에 [괄호]가 포함되어 있습니다. zip 명령이 이를 해석하므로 백슬래시를 사용하여 왼쪽 대괄호를 이스케이프 처리해야 합니다. 이렇게 하려면 배열에 ${symlink}
or 를 추가하는 대신 or 를 추가합니다 .${dir}
${symlink//\[/\\\[}
${dir//\[/\\\[}