공통 접두사와 접미어가 증가하는 HDFS 파일 목록이 있다고합시다. 예를 들어Hadoop & Bash : 파일 이름 일치 범위 삭제
part-1.gz, part-2.gz, part-3.gz, ..., part-50.gz
디렉토리에 몇 개의 파일 만 남기고 싶습니다. 3 개의 파일이 필요합니다. 파일은 테스트에 사용되므로 파일 선택은 중요하지 않습니다.
다른 파일 47 개를 삭제하는 가장 빠른 방법 &은 무엇입니까? 여기
공통 접두사와 접미어가 증가하는 HDFS 파일 목록이 있다고합시다. 예를 들어Hadoop & Bash : 파일 이름 일치 범위 삭제
part-1.gz, part-2.gz, part-3.gz, ..., part-50.gz
디렉토리에 몇 개의 파일 만 남기고 싶습니다. 3 개의 파일이 필요합니다. 파일은 테스트에 사용되므로 파일 선택은 중요하지 않습니다.
다른 파일 47 개를 삭제하는 가장 빠른 방법 &은 무엇입니까? 여기
몇 가지 옵션 : 새 폴더 위에 세 파일을 수동으로
이동 후 기존 폴더를 삭제합니다. fs -ls
와
잡아 파일 이름은 다음 다음을 RM은, 상위 N 당기십시오. 이것은 가장 견고한 방법입니다.
hadoop fs -ls /path/to/files
당신에게 단지 파일 이름을 (원하는 파일을 잡아 그에 따라 GREP을 조정)
hadoop fs -ls /path/to/files | grep 'part' | awk '{print $8}'
인쇄 LS 출력을 제공합니다.
hadoop fs -ls /path/to/files | grep 'part' | awk '{print $8}' | head -n47
for 루프로 상위 47
던져이를 잡고 그들을 RM은 :
hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47 | xargs hadoop fs -rm
: 대신에 대한 루프, 당신은
xargs
사용할 수의
for k in `hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47`
do
hadoop fs -rm $k
done
을
키이스에게 영감을 주신 덕분에
Bash?
보관하려는 파일과 그 이유는 무엇입니까? 그들의 이름은 무엇입니까?
$ rm !(part-[1-3].gz)
파트 1.gz, 파트 2.gz, 및 파트 3.gz 제외한 모든 파일을 제거합니다 : 위의 예에서, 당신이 뭔가를 할 수 있습니다.
또한 같은 것을 할 수 있습니다 나열된 마지막 세 개의 파일을 제외한 모든 제거
$ rm $(ls | sed -n '4,$p')
.
또한이 작업을 수행 할 수 있습니다 : 당신이 디렉토리에 수백 수백 개의 파일이있는 경우 안전
$ls | sed -n '4,$p' | xargs rm
.
처음 세 줄을 건너 뛰고 싶다면'sed -n '4, $ p''를 의미한다고 생각합니다. – pilcrow
@pilcrow : 네 말이 맞아. 나는 오류를 바로 잡을 것이다. –
AWK :
ls part-*.gz|awk -F '[-\.]' '$2>3{print "rm "$0}' |sh
당신이 계속해야 수행 처음 세 또는 마지막 세?
hadoop fs -ls | grep 'part-[0-9]*\.gz' | sort -g -k2 -t- | tail -n +4 | xargs -r -d\\n hadoop fs -rm
모든하지만 마지막 세 제거하려면 :
은 처음 세 남기고 모두 제거하려면이 명령은 파일의 실제 수에 의존하지 않는hadoop fs -ls | grep 'part-[0-9]*\.gz' | sort -g -k2 -t- | head -n -3 | xargs -r -d\\n hadoop fs -rm
주,도 3 개 이상 존재하거나 원래 리스팅의 정확한 정렬에 관한 정보는 없지만 숫자가 하이픈 다음에 오는 사실에 의존합니다. xargs
의 매개 변수는 꼭 필요한 것은 아니지만 특정 상황에서 유용 할 수 있습니다.
'hadoop fs -ls | grep 부분 | awk '{print $ 8}'| 머리 -n47 | xargs -I {} hadoop fs -rm {}'아마도? – Keith
보안을 위해, 항상 for 루프를 사용하고이''hadoop fs -rm/PATH .../$ file''와 같은 접두사 경로를 사용하면 다른 것을 제거 할 기회가 없습니다. –