배경
디렉터리에는 N개의 하위 디렉터리가 포함될 수 있습니다. 각 하위 디렉터리에는 추출할 여러 .rar 파일이 포함되어 있습니다.
~/mydir/Data1~/mydir/Data2...~/mydir/DataN
"i"와 "r", "a"와 "1" 사이의 공백에 유의하세요.
표적
명령줄에서 단일 명령을 실행하여 .rar 파일의 압축을 풀고 해당 파일을 원래 .rar 디렉터리에 그대로 둡니다(새 디렉터리를 생성하지 않음).
내 첫 번째 아이디어는 .rar 파일 목록을 재귀적으로 작성하고 직접 출력하는 것이었습니다.
홈페이지/사용자/mydi\ r/Data\ grep.rar 찾기 1 |
다음을 입력 xargs
하고 압축을 풉니다.
unrar e -r /home/user/mydi\ r/Data\ 1/myfile.rar
질문
xargs
디렉토리 및 파일 이름에 공백 문자와 문자 없음을 올바르게 처리할 수 있습니까 \
?
디렉터리 및 .rar 파일 이름의 공백 문자로 인해 오류가 발생한 것으로 의심됩니다.
find /home/user/Desktop/ -name "*Har*.rar" | xargs -d '\n' unrar e -r
unrar
공백 문자 앞에 '\'가 있어야 하기 때문입니다 .
/home/user/mydi\ r/Data\ 1/myfile.rar
반환된 오류: No files to extract
진단에 관한 질문이나 제안 사항이 있으시면 대단히 감사하겠습니다.
답변1
이것이 바로 GNU 에 옵션이 find
있는 이유입니다. -print0
GNU 에는 옵션 xargs
이 있습니다 -0
. 이러한 옵션을 사용하면 find
파일 이름이 ASCII 문자로 구분되고 조회 문자가 입력 인수를 구분하게 NUL
됩니다 . 이를 통해 공백이 포함된 파일 이름을 올바르게 처리할 수 있습니다.xargs
NUL
예를 들어:
find /home/user/Desktop -name '*.rar' -print0 | xargs -0 -n1 unrar e -r
명령줄에 아카이브가 예상되므로 이 -n1
플래그가 필요합니다 .xargs
unrar e