tar 를 사용해서 파일을 복사하려고 하는데 * 는 사용 못하나요?
글쓴이: hancar01 / 작성시간: 수, 2011/07/06 - 10:01오전
tmp/backup/aaa/etc 에는 test.txt 라는 파일이 있습니다.
여러 파일을 선택적으로 옮겨야 하는 상황인데
모든 txt 파일을 옮기려고 아래의 명령어로 실행을 하였습니다.
[root@localhost ~]#tar c -O -C /tmp/backup/ aaa/etc/*.txt | tar x -C /
tar: aaa/etc/*.txt: Warning: Cannot stat: No such file or directory
디렉토리를 찾지 못하네요..
그런데..
[root@localhost ~]#tar c -O -C /tmp/backup/ aaa/etc/test.txt | tar x -C /
위에서 처럼 * 대신에 파일명을 적어주면 잘 되네요..
* 를 인식하게 할 방법은 없을까요??
Forums:
tar 명령어가
특정 파일을 확인하나보네요. cannot stat이라는 말이 뜨는걸 보니깐요.
tar 명령어 옵션을 바꿔보시거나
tar 소스를 확인해 보시는게 어떨까요^^;
그건 tar가 할 일이 아니라 쉘이 할
그건 tar가 할 일이 아니라 쉘이 할 일인데요.
저것만 봐서는 무슨 쉘을 쓰는지는 모르지만 쉘 매뉴얼을 보면 (C 쉘의) noglob같이 그거 조정하는 쉘 변수가 있을겁니다.
안되는 이유는 "aaa/etc/*.txt"는
안되는 이유는 "aaa/etc/*.txt"는 shell이 현재 디렉토리에서 expand하려고 하니
없어서 "aaa/etc/*.txt" 그대로 tar 에 넘기기때문입니다.
tar 입장에서는 *.txt를 문자 그대로 해석하려고 시도하고요..
이런 경우는 보통 find + tar 조합을 써서 합니다.
그런데 미리 /tmp/backup 디렉토리로 이동한 후에 하면 간단한데, 옮기지 않고 하자니
좀 복잡해지네요..
그런데 /에 바로 쓰는거라 좀 위험하네요.. 충분히 확인해보고 시도하세요
또 *.txt 파일이 많다면 xargs와 tar c의 조합은 잘 동작 안할 수도 있습니다.
이경우에는 또 -O 옵션이 있어서 어떻게 될지 잘 모르겠네요..
그냥 "*.txt" 가 아니라
그냥 "*.txt" 가 아니라 "aaa/etc/*.txt" 군요...
그러면 중간에 grep을 한번더 넣어야겠네요..
xargs + tar c 조합의 문제는 없을 것 같습니다. (-O때문에)
또 오류가 있네요.. 원글자의
또 오류가 있네요..
원글자의 의도는
/tmp/backup/aaa/etc/a.txt
/tmp/backup/aaa/etc/b.txt
/tmp/backup/aaa/etc/subdir/c.txt
가 있으면 이걸
/aaa/etc/a.txt
/aaa/etc/b.txt
로 카피하기를 원하는 건데, 위 코드는 /etc/subdir/c.txt도 되네요..
그런데 디렉토리 recursive하게 안하려면, 그냥 cp를 쓰는게 낫지 않나요??
댓글 달기