2014-01-20 2 views
0

txt 파일에서 삭제해야하는 약 10k 개 항목에 대한 목록이 있습니다. xargs 및 txt 파일의 개행 - "xargs -d '/ n'"이 (가) 실패했습니다

은 여기 시작 : Unix: How to delete files listed in a file

을하지만 난 '/ R'

그래서를 통과하지/무시 필요한 것 같은데

rm: 721_0199_01.mov\r: No such file or directory 

에 달렸다, 나는 여기 : xargs and find, rm complaining about \n (newline) in filename

어쩌면 다음과 같이 보일 수 있습니다.

,210
xargs -d '/r' rm < my-big-list.txt 

하지만 불평 :

xargs: illegal option -- d 
usage: xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] 
     [-L number] [-n number [-x]] [-P maxprocs] [-s size] 
     [utility [argument ...]] 
내가 그 다음에 할 일, 내가 xargs를위한보고 어떤 사람 페이지에 -d 찾을 수 있도록 확실하지 수

....

나는 길을 떠난다, 내가 읽는 것을 놓쳤 느냐?

고맙습니다. -

음 날 리드하는,이 파일 이름에 공백의 톤을 다시 말하지만, 나는/r을 제거 않았다, 여러분 모두 감사합니다,하지만 난이 :

How can I make xargs handle filenames that contain spaces?

-0 공백과 개행 문자 대신에 NUL (``\ 0 '') 문자가 구분 기호로 사용되도록 xargs를 변경하십시오. 이것은 콘서트에서 find (1)의 -print0 함수와 함께 사용될 것으로 예상됩니다.

그리고 그에게 :

Linux: Redirecting output of a command to "find"

하지만 그건 정말 도움이 아니에요 ...

방사선 밴 스카이프 Testccc995141.vid

방사선 밴 스카이프 Testccc995142.vid

RAD 밴 Skype Testccc995143.aiff

RAD 화물차 스카이프 Testccc995144.aiff

RAD 화물차 스카이프 Testccc995145.qtc

RAD 화물차 스카이프 Testccc998bf.mov

RAD 화물차 스카이프 Testccc998bf1.vid

RAD 화물차 스카이프 Testccc998bf2.vid

rad 밴 Skype Testccc998bf3.aiff

rad 밴 Skype Testccc998bf4.AIFF

방사선 밴 스카이프 Testccc998bf5.qtc

내가 삭제 노력하고있어 좋은 예이다 -이 목록은 디렉토리의 내용의 약 60 %를 의심 ...

인가 거기에 찾기를 사용하는 몇 가지 트릭이 있습니까?

고맙습니다!

+0

txt 파일을 Windows에서 준비 했습니까? 이 경우 CR을 먼저 제거하면 올바르게 작동합니다. tr -d '\ r'< infile > outfile – JosefN

+0

OS X에서 TextEdit을 사용했습니다 ... – chaoswarriorx

+0

일반 텍스트 모드의 텍스트 편집은 LF 만 사용하므로 조금 이상합니다. 어쨌든 tr -d '\ r' my-big-list2.txt를 실행하고 길이를 비교하는 것은 아무런 해가되지 않습니다. 새 파일이 작 으면 CR이 제거되고 이러한 목록을 사용하면 xargs가 작동합니다. 나는 커맨드 라인 한계에 대해서만 걱정하고있다. – JosefN

답변

0

원래 추측되었지만 Windows 운영 체제에서 원본 파일이 만들어진 것처럼 보입니다. 유니 아래는 일반적으로 \ n 아니라 * 동안 윈도우에서

는, 새로운 라인을 표현하기 위해, 당신은 \ 연구 \ n를 사용합니다. 그러면 xargs가이 문자를 제거하지 못하는 이유가 설명됩니다.

프로그램을 통해 파일을 실행하는 것이 좋습니다 : dos2unix 그리고 문제가 해결됩니다.

remove.sh

#!/bin/bash 
while read line 
do 
    rm $line 
done 

remove.sh < my-big-list.txt 

xargs를 접근 bash는 한계에 도달 할 수 있습니다

0

당신은 약간 다른 방법을 시도 할 수 있습니다. echo $ ARG_MAX는 파일보다 커야합니다. 내보내기를 통해 늘릴 수 있습니다. ARG_MAX = new_value

0

새 줄 문자를 구분 기호로 사용하려면 백 슬래시와 'n'을 사용해야합니다.

xargs -d '\n' rm < my-big-list.txt