2012-09-24 4 views
0

.txt 파일이 있고 각 행에 다른 파일 위치가 있습니다.SSH - txt 파일의 행을 반복하고 파일을 삭제합니다.

file1.zip 
file2.zip 
file3.zip 

각 줄마다 각 줄과 rm -f 파일 이름을 반복하여 열 수 있습니까?

또한 파일이 존재하지 않는 경우 (이미 삭제 된 경우) 오류가 발생하며이를 피하는 방법은 무엇입니까?

EDIT : 파일 이름에 공백이있을 수 있습니다. 따라서 파일 이름에도 공백이있을 수 있습니다.

답변

1

당신은 라인을 통해 반복하는 catfor 루프를 사용할 수 있습니다 : 파일이 존재하고 일반 파일 (디렉토리가 아닌) 인 경우

IFS=$'\n'; \ 
for file in `cat list.txt`; do \ 
    if [ -f $file ]; then \ 
     rm -f "$file"; \ 
    fi; \ 
done 

if [ -f $file ] 확인합니다. 검사가 실패하면 건너 뜁니다.

상단의 IFS=$'\n'은 구분 기호를 줄 바꿈 전용으로 설정합니다. 이렇게하면 공백이있는 파일을 처리 할 수 ​​있습니다.

+0

if [-f] 검사가 필요합니까? rm -f는 존재하지 않는 파일이나 디렉토리 (진단 메시지)에서 즉시 실패하지 않으며 디렉토리를 제거하지 않습니다. – jrajav

+0

@ 키유라 OP는 오류 던지는 것을 피하는 방법에 대해 질문했습니다. 조건부 검사는 모든 목적으로 오류를 던지지 않도록합니다 (파일이 존재하지 않거나 디렉토리 인 경우). – newfurniturey

+0

"오류가 발생했습니다"라는 것이 실제로 명령을 실패하게하는 것으로 이해합니다. rm -f [일부 파일 목록]을 사용하면 각 디렉토리 및 발견되지 않은 파일에 대한 메시지가 인쇄되지만 계속 진행되고 목록에있는 모든 내용이 삭제됩니다. 당신의 수표는 어떤 기능도 추가하지 않는다. 기본적으로 그 메시지를 선점하고 각 파일에 명령을 개별적으로 실행하는 오버 헤드를 추가한다. 정말로 오류 출력을 먹고 싶다면 명시 적으로 그렇게하는 것이 낫습니다. – jrajav

0

xargs -n1 echo < test.txt

은 rm -f 또는 다른 명령으로 '에코'교체하십시오. 자세한 내용은 cat test.txt |

'자세한 내용은'man xargs '를 사용할 수도 있습니다.

+0

n1이 줄 단위로 구분되어 있습니까? 파일 이름에 공백이있을 수 있으며 공백으로 분리됩니다. – robjbrain

+0

예, 불행히도 공백으로 구분됩니다. sed를 통해 파이프를 통과시켜 각 줄을 따옴표로 묶거나 vim을 사용하여 파일 자체에서 수행 할 수 있습니다. Sed 옵션 :'cat test.txt | sed -e "s, [^.], \ '&"-e "s, \ $, \',"| xargs -n1 echo' 편집 : 신경 쓰지 마세요, 방금 테스트 했는데도 작동하지 않습니다. xargs는 공백을 잘 처리하지 못합니다. – jrajav

+0

부수적으로이 전체 작업에 대한 더 강력한 옵션은 xargs -0과 함께 find -print0을 사용하여 원하는 모든 파일을 얻는 것입니다. 어떻게 입력 파일을 가져올 지 모르겠습니다. – jrajav

관련 문제