배경

배경

배경

디렉터리에는 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있는 이유입니다. -print0GNU 에는 옵션 xargs이 있습니다 -0. 이러한 옵션을 사용하면 find파일 이름이 ASCII 문자로 구분되고 조회 문자가 입력 인수를 구분하게 NUL됩니다 . 이를 통해 공백이 포함된 파일 이름을 올바르게 처리할 수 있습니다.xargsNUL

예를 들어:

find /home/user/Desktop -name '*.rar' -print0 | xargs -0 -n1 unrar e -r

명령줄에 아카이브가 예상되므로 이 -n1플래그가 필요합니다 .xargsunrar e

관련 정보