모든 대상 파일이 삭제되었습니다. 물론 삭제를 다시 실행하려고 하면 파일이 삭제되지 않습니다. 시간을 낭비해서 죄송합니다.
나는 cygwin에서 bash를 사용하고 있습니다.
내 출력은 fdupes
파일에 있습니다. 그대로 유지하고 나열된 나머지 파일을 삭제하려는 디렉터리를 제외하기 위해 출력을 greping하고 있습니다.
공백이 있는 항목이 있습니다.
./NewVolume/keep/2009/conference/conference/conference 004.jpg
어떤 여행 xargs
:
$ cat real-dupes.txt |xargs rm {}
...
rm: cannot remove ‘2009/conference/conference/conference’: No such file or directory`
전환 하려고 하면 -0
다음 줄이 함께 그룹화되어 있는 것처럼 보입니다.
$ cat real-dupes.txt |xargs -0 rm
xargs: argument line too long
다른 질문에는 답변이 있으며, 질문자는 find
답변을 사용하여 논증을 입력하는 것이 좋습니다 xargs
. find
제거하려는 중복 항목을 식별하는 데 쉽게 사용할 수 없다고 믿기 때문에 이는 내 시나리오에 도움이 되지 않습니다 . 또한 fdupes 작업은 약 12시간 이상 실행되었기 때문에 이 데이터 세트를 꼭 사용하고 싶었습니다.
내가 아는 한, fdupes
자동 삭제에서 디렉터리를 제외할 수 있는 방법이 없으므로 즉시 그렇게 할 수는 없습니다.
답변1
xargs -0
null로 끝나는 문자열이 필요하기 때문에 작동하지 않지만 찾을 수 없으므로 모든 입력을 읽고 해당 인수에 와일드카드를 사용합니다.
\0
다음과 같이 각각의 새 줄을 변환하십시오(각 줄에 파일 이름을 지정하고 싶습니다) .
cat real-dupes.txt | tr '\n' '\0' | xargs -0 rm {}
답변2
기본적으로 xargs
공백으로 분할됩니다 . 당신은 사용할 수 있습니다비표준 -0
옵션문자로 분할되지만 \000
입력은 예상대로 준비되어야 합니다. ( find ... -print0
이것은 이를 수행하는 한 가지 방법입니다. 버전에 find
해당 옵션이 있다고 가정합니다 -print0
.)
파일 이름에 새 줄이 포함되어 있지 않으면(예: 한 줄에 하나의 파일) xargs
다음과 같이 사용할 수 있습니다.
xargs -I{} rm {} <real-dupes.txt
매뉴얼 페이지에는 xargs
플래그에 대한 다음 설명이 있습니다 -I
.
-I replace-str
replace-str
초기 인수의 발생을 표준 입력에서 읽은 이름으로 바꿉니다. 또한 따옴표가 없는 공백은 항목을 종료하지 않으며 대신 구분 기호는 개행 문자입니다. 의미-x
하고-L 1
.