[HADOOP] Hadoop 및 Bash : 파일 이름 일치 범위 삭제
HADOOPHadoop 및 Bash : 파일 이름 일치 범위 삭제
공통 접두사와 증가하는 접미사를 사용하여 HDFS에있는 파일 목록을 가지고 있다고 가정 해보십시오. 예를 들어,
part-1.gz, part-2.gz, part-3.gz, ..., part-50.gz
디렉토리에 몇 개의 파일 만 남기고 싶습니다. 3 개의 파일이 있습니다. 파일은 테스트를 위해 사용될 것이므로 파일 선택은 중요하지 않습니다.
47 개의 다른 파일을 삭제하는 가장 간단하고 빠른 방법은 무엇입니까?
해결법
-
==============================
1.몇 가지 옵션 :
몇 가지 옵션 :
3 개의 파일을 수동으로 새 폴더로 이동 한 다음 이전 폴더를 삭제하십시오.
fs -ls로 파일 이름을 잡은 다음 맨 위 n을 당긴 다음 rm을 붙입니다. 이것은 가장 견고한 방법입니다.
hadoop fs -ls / path / to / files는 ls 출력을줍니다.
hadoop fs -ls / path / to / files | grep '부분'| awk '{print $ 8}'는 파일 이름 만 출력합니다 (grep을 적절히 조정하여 원하는 파일을 가져옵니다).
hadoop fs -ls / path / to / files | grep '부분'| awk '{print $ 8}'| 머리 - n47는 정상 47를 움켜 잡는다
이것을 for 루프와 rm에 던지십시오.
for k in `hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47` do hadoop fs -rm $k done
for-loop 대신 xargs를 사용할 수 있습니다.
hadoop fs -ls /path/to/files | grep part | awk '{print $8}' | head -n47 | xargs hadoop fs -rm
영감을 얻은 Keith에게 감사드립니다.
-
==============================
2.배시?
배시?
유지하고 싶은 파일과 그 이유는 무엇입니까? 그들의 이름은 무엇입니까? 위의 예에서 다음과 같이 할 수 있습니다.
$ rm !(part-[1-3].gz)
Part-1.gz, part-2.gz 및 part-3.gz를 제외한 모든 파일이 제거됩니다.
다음과 같이 할 수도 있습니다.
$ rm $(ls | sed -n '4,$p')
나열된 마지막 세 파일을 제외한 모든 파일이 제거됩니다.
당신도 이것을 할 수 있습니다 :
$ls | sed -n '4,$p' | xargs rm
디렉토리에 수백, 수백 개의 파일이 있다면 어느 것이 더 안전합니다.
-
==============================
3.처음 세 개 또는 세 개를 유지해야합니까?
처음 세 개 또는 세 개를 유지해야합니까?
처음 세 가지를 제외하고 모두 제거하려면 다음을 수행하십시오.
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에 대한 매개 변수는 꼭 필요한 것은 아니지만 특정 상황에서 유용 할 수 있습니다.
-
==============================
4.
ls part-*.gz | sed -e "1,3d" | xargs rm
-
==============================
5.awk :
awk :
ls part-*.gz|awk -F '[-\.]' '$2>3{print "rm "$0}' |sh
from https://stackoverflow.com/questions/7733096/hadoop-bash-delete-filenames-matching-range by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop : core-site.xml에서 기본 FileSystem을 HDFS로 설정할 수 없습니다. (0) | 2019.07.27 |
---|---|
[HADOOP] Hadoop 매퍼가 여러 개의 키를 출력 할 수 있습니까? (0) | 2019.07.27 |
[HADOOP] hadoop은 어떻게 입력 파일을 읽습니까? (0) | 2019.07.27 |
[HADOOP] Java Hadoop : 입력 파일로 가져와 각 파일의 줄 수를 출력하는 매퍼를 어떻게 만들 수 있습니까? (0) | 2019.07.27 |
[HADOOP] Hadoop Map Reduce에서 PDF 파일 파싱 (0) | 2019.07.27 |