다음과 같은 스크립트에서 명령을 실행하고 있습니다.
tar -c -f ar.tar a b c d
여기서 b, c 및 d는 존재하지 않을 수 있으며 디렉토리일 수 있습니다. 내가 생각해낸 해결책은 ls -d
to 의 출력을 파이프 grep
한 다음 이를 tar
명령에 연결하거나 확장된 glob 을 여는 것이었습니다 @(a|b|c|d)
.
이를 수행하는 더 깨끗한 방법이 있습니까? 저는 Debian Wheezy를 사용하고 있는데 매개변수가 없는 것 같습니다 --include
.
답변1
당신은 시도 할 수 있습니다
tar cf ar.tar $(ls a b c d )
어디
c
만드는데 사용됨f ar.tar
tar 파일 지정$(ls a b c d)
표준 입력에 실제로 존재하는 파일을 나열합니다(다른 파일에 대해서는 오류를 표시합니다).
답변2
tar 아카이브에 있는 파일의 전체 경로를 얻을 수 있으면 다음을 수행할 수 있습니다.
tar -c -f ar.tar $(readlink -e a b c d)
-e
readlink 옵션은 기존 파일 이름을 정규화하고 다른 파일 이름은 자동으로 무시합니다.
답변3
사용
find path/to/dir -name "*.ext1" -o -name "*.ext2"
설명하다
- 첫 번째 매개변수는 검색할 디렉터리입니다.
- 재귀는 기본적으로 수행됩니다
find
. - 따라서
-o
위-or
의 내용은 이 와일드카드 또는 이것을 검색하는 것을 의미합니다. 모드가 하나만 있는 경우에는 필요하지 않습니다-o
. - 와일드카드 패턴 주위에는 따옴표가 필요합니다.