2013-02-03 1 views
1

EXPORT_v1x0으로 시작하고 날짜가 2013-01-25 (2013 년 1 월 25 일) 미만인 파일을 Unix 디렉토리에서 삭제하려고합니다. 파일을 하나씩 삭제할 수 있지만 모든 파일을 삭제하는 데 며칠이 걸릴 것입니다. 특정 패턴의 파일을 삭제하는 더 좋은 방법이 있습니까? 위의 파일을 볼 경우 내가 LS날짜가 특정 날짜보다 작은 비슷한 패턴을 가진 모든 파일을 삭제하십시오.

bash-3.00$ ls /data/bds/real 
EXPORT_v1x0_20120811.dat.gz 
EXPORT_v1x0_20120811.dat.gz 

을 수행 할 때

아래는 샘플 파일이다. 각 파일에는 날짜가 있습니다. 우리가 consideration-

EXPORT_v1x0_20120811.dat.gz 

에이 파일을 가정 그것은 날짜 20120811 그래서 내가 EXPORT_v1x0로 시작하는 모든 파일을 삭제해야하고 그 일 미만인 20130125입니다. 따라서 날짜가 20130125 미만인 모든 파일을 삭제해야한다면 날짜가 20130125 미만이므로 언급 한 모든 파일이 삭제됩니다.

참고 : - 모든 파일은 위에서 언급 한 것과 정확히 같은 패턴을 가지고 있습니다. 그 뒤에 오는 날짜와 다른 숫자 만 다릅니다.

그래서 EXPORT_v1x0으로 시작하고 날짜가 20130125 미만인 모든 파일을 삭제하면됩니다.

나는 SunOS을 실행 중입니다. 나는 유닉스를 더 잘 배우는 과정에있다. 따라서 어떤 높은 수준의 명령과 스크립트도 확실하지 않습니다.

답변

1

문제에 대한 최초의 순진한 접근 방식으로 사용자의 필요에 따라 tweek :

find . | awk -F'_' '$3<20130125' | xargs rm 

재귀 검색을 수행에서 find을 방지하고 단지 현재 폴더를 유지하려면

find . \(! -name . -prune \) -type f | ... 

2 차 업데이트 :

는 문자열을 포함하는 경우에만 목록 파일 "EXPORT_v1x0에 name 매개 변수를 추가 "

find . \(! -name . -prune \) -type f -name "EXPORT_v1x0*" | ... 

간단한 방법은로 만들려면 0 non-recursive는 maxdepth 플래그를 사용하는 것입니다.

find . -maxdepth 1 -type f -name "EXPORT_v1x0*" | ... 
+0

제안에 대해 Fredrik에게 감사드립니다. 파일을 삭제하기 전에 일부 드라이 런을해야한다면 xargs rm을 제거해야합니까? – ferhan

+0

. 'find' 명령은 매우 다양한 기능을 가지고 있습니다. 다른 매개 변수를 사용하면 –

+0

뒤에있는 파일과 정확히 일치하도록 나열된 파일을 좁힐 수 있습니다.이 명령을 사용하면'find. | awk -F'_ ''{if ($ 3 <20121025) print} ''그러면 현재 디렉토리에서 다른 디렉토리의 모든 파일을 인쇄합니다. 나는 현재 디렉토리에서 모든 파일을 삭제할 것이다. 어떤 생각을 바꾸어야할까요? – ferhan

0

경고 :

당신은 같이 할 파일 목록을 매우주의 :이 파일의 적절한 목록을 제공하는 경우

ls -1 | awk -F _ '$3<"20130125"' 

을, 당신은 할 수

ls -1 | awk -F _ '$3<"20130125"' | xargs rm 
+0

감사합니다. 파일을 인쇄하기위한 첫 번째 제안을 시도했을 때, 나는이 예외를 얻었다.'bash-3.00 $ ls -1 | awk : 1 행 근처에 구문 오류가 있습니다. awk : 1 행 근처에서 오류가 발생했습니다. '. awk : F_ '$ 3 "" "20130125"{print}' 왜? 다른 유닉스의 풍미 때문에 나는 달리고있다? – ferhan

+0

http://mywiki.wooledge.org/ParsingLs :-) –

+0

@TechGeeky : 확실하지 않습니다. 그건 아주 기본적인 awk입니다. 작은 따옴표와 큰 따옴표가 맞는지 확인하십시오. –