링크 ux 셸 ls xargs rm 조합 파일 삭제

3793 단어
보통 ls 에 열 거 된 파일 입 니 다. rm - rf 를 통 해 직접 파 이 프 를 삭제 하려 면 올 바 르 지 않 습 니 다. 이 때 는 명령 xargs 에 맞 춰 사용 해 야 합 니 다.
예 를 들 면: 시간 순 으로 마지막 10 개의 파일 을 삭제 합 니 다.
ls -t | tail -10 | xargs rm -rf    

물론
ls -lt | tail -100 | awk '{ print $9 }' | xargs rm -rf   

두 가지 효 과 는 같은 이치 입 니 다. 시간 에 따라 거꾸로 배열 하려 면 현재 와 가장 가 까 운 시간 이 마지막 에 표 시 될 수록 ls - rt 를 사용 하 십시오. 물론 find 와 rm 을 사용 하여 삭제 할 수도 있 습 니 다.
아래 문장 으로 내용 을 비 울 수도 있 습 니 다.
#!/bin/bash
for i in `ls test.log.??` ;do
    echo "">$i
done

물론 여러 디 렉 터 리 아래 라면 파일 을 지 워 도 됩 니 다.단지 한 겹 더 끼 워 넣 어서 기억 할 뿐이다.내 디 렉 터 리 구 조 는 다음 과 같다.
[root@web tomcat]# ll
总计 260
drwxr-xr-x 2 www www 20480 12-28 09:23 bbs
drwxr-xr-x 2 www www 16384 12-28 00:00 comment
drwxr-xr-x 2 www www 36864 12-28 03:50 enterprise
drwxr-xr-x 2 www www 24576 12-28 00:00 expert
drwxr-xr-x 2 www www 36864 12-28 00:02 feedback
drwxr-xr-x 2 www www 36864 11-15 12:30 generator
drwxr-xr-x 2 www www 24576 12-28 00:02 passport
drwxr-xr-x 2 www www 20480 12-28 00:00 search
drwxr-xr-x 2 www www 20480 12-28 09:35 usercenter
[root@web comment]# ll
总计 936
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-24.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-25.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-26.log
-rw-rw-r-- 1 www www       2 12-28 09:57 catalina.2012-12-27.log
-rw-r--r-- 1 www www   34155 12-28 10:01 catalina.out
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost.2012-12-14.log
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost.2012-12-17.log
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost_access_log.2012-12-25.txt
-rw-rw-r-- 1 www www       2 12-28 09:57 localhost_access_log.2012-12-26.txt
-rw-rw-r-- 1 www www  629729 12-28 09:57 localhost_access_log.2012-12-27.txt

위의 모든 디 렉 터 리 에 있 는 모든 파일 을 비우 고 싶다 면 이렇게 할 수 있 습 니 다.
for i in `ls`;do (cd $i ;for m in `ls`;do echo " ">$m;done);done

주: 위의 괄호 는 없어 서 는 안 됩 니 다.
파일 의 내용 을 비우 고 싶 으 면 xargs 를 사용 하여 echo "> file 에 맞 추 면 제대로 적용 되 지 않 습 니 다.예:
find . -name "test.*" |xargs echo "">

find 와 echo 는 이렇게 배합 하여 사용 하지 않 기 때문이다.그 두 가 지 는 간단하게 배합 하면 또 다른 묘용 이 있다.
find . -name "file*" -print | xargs echo "" > /tmp/find.log

이 문장의 역할 은 현재 디 렉 터 리 에서 file 로 시작 하 는 모든 파일 을 찾 고 상대 적 인 경로 와 이름 을 find. log 파일 에 입력 하 는 것 입 니 다. 입력 방식 은 줄 마다 입 니 다.조건 에 맞 는 원본 파일 은 변 하지 않 습 니 다.
find 가 파일 을 찾 고 비우 기 위해 서 는 어 쩔 수 없 는 것 일 까?이것 은 불가능 하 다 는 것 이 분명 하 다.풋내기 들 의 방법 은:
#!/bin/bash
for i in `find ./server* -name "test.log" `
do
cat /dev/null > $i
done

고수 들 은 분명히 이렇게 긴 문 구 를 사용 할 가치 가 없다. 고수 들 의 방법 은:
[root@localhost log]# find . -name "maillog*" |awk '{ print "echo>"$0}'|bash

아예 echo 도 빼 든 가.
 [root@localhost log]# find . -name "maillog*" |awk '{ print ">"$0}'|bash

이 문 구 는 어떻게 변 화 했 습 니까?
[root@localhost log]# find . -name "maillog*"|xargs -i ls -l {}
-rw------- 1 root root 0 11-09 05:06 ./maillog
-rw------- 1 root root 0 11-09 05:06 ./maillog.1

이상 은 모든 파일 을 찾기 위해 강력 한 awk 를 이용 하여 모든 출력 파일 앞 에 echo "> 를 추가 할 수 있 습 니 다. bash 구문 으로 나타 납 니 다.
[root@localhost log]# find . -name "maillog*"|awk '{print "echo > "$0}'
echo > ./maillog
echo > ./maillog.1

주: 제 위의 예 는 디 렉 터 리 만 열 거 했 을 뿐 find 를 찾 을 때 아래 의 하위 디 렉 터 리 에 조건 에 맞 는 문 구 를 포함 합 니 다.
아래 명령 에 따라 find 를 찾 아 파일 을 대량으로 비 울 수도 있 습 니 다.
find . -type f -size +5M -exec cp /dev/null {} \;

 
 

좋은 웹페이지 즐겨찾기