#find [경로] [옵션] [액션]
size 옵션
현재 시스템에서 50메가 이상인 파일 찾기
#find / -size +50M
# mkdir /practice/find_test
# cd /practice/find_test
# touch test{01..10}
-delete 검색 결과 삭제
find . -type f -name "test*" -delete
이름이 tset로 시작되는거 다 삭제 해줌
-exec [명령어] \; 검색 결과를 지정한 명령어 처리
-exec [명령어] {} \; 검색 결과를 차례대로 매칭하면서 지정된 명령어 실행
# find . -empty -exec ls -l \;
#find . -empty -exec ls -l {} \;
vi find_test.sh
#!/bin/bash
for z in $(seq 0 7); do
for i in $(seq 0 7); do
for j in $(seq 0 7); do
for k in $(seq 0 7); do
touch ${z}${i}${j}${k};
chmod ${z}${i}${j}{k} ${z}${i}${j}${k};
done;
done;
done;
done;
# sh find_test.sh //명령어 실행
ex) 퍼미션이 777 파일을 찾아서 화면에 출력
#find . -perm 777 //정확히 허가권이 0777인 파일 검색
./0777
# find . -perm +777 | sort -n | more
//기준이 되는 허가권에 비트가 하나라도 일치하는 파일
#find . -perm -777 //기준이 되는 허가권 이상인 파일
./7777
./0777
./3777
./2777
./5777
./4777
./6777
./1777
1.find 명령어로 현재 경로에 이름이 0으로 시작하여 1로 끝나는 파일만 gzip으로 압축 "0??1"
#find -name "0??1" -exec gzip {} \;
#ll *.gz
xargs
# mkdir /practice/xargs_test
# cd /practice/xargs_test
# vi xargs_test.sh
#!/bin/bash
for z in $(seq 0 10); do
fallocate -l 10K "$RANDOM.txt"
done;
for z in $(seq 0 10); do
fallocate -l 15K "$RANDOM.txt"
done;
for z in $(seq 0 10); do
fallocate -l 20K "$RANDOM.txt"
done;
# sh xargs_test.sh
1.find를 쓰지 않고 크기가 10kb인 파일명만 출력하고 이름의 숫자가 적은순으로 정렬
# ll -h |grep 10K | cut -d " " -f 8 | sort
2. find를 사용하여 크기가 10kb인 파일을 출력하고, 파일의 이름만 출력하여 정렬
# find . -size 10k | cut -d "/" -f 2 | sort -n
3. 현재 경로에서 find를 사용하여 크기가 10kb 파일 삭제, 단 -delete 옵션 사용 금지
# find . -size 10k -exec rm {} \;
xargs (eXtended Arguments)
- 표준 출력 값(파일이름)을 이용하여 명령을 실행
- find와 사용 시 결과물을 다음 명령어에 인자로 전달하는 역할
- 여러 명령어와 함께 조합하여 사용할 수 있다.
-i 인자로 문자열을 전달
-t 상세한 정보 출력
4. find 를 사용하지 않고 크기가 20k 파일을 삭제
#ll -h | grep 20K | cut -d " " -f 8 | xargs rm
ex) find로 원하는 파일찾아서 해당 파일에서 특정 문자열 검색
#find / -name "*" | xargs grep [계정명:암호]
ex)/bin 디렉토리에 가장 큰 일반 파일을 찾아 크기를 확인하여
가장큰 파일을 출력
1.#find /bin - type f | xargs du -s
2.#find /bin - type f | xargs du -s | sort -n | tail -1
ex) /practice/find_test 이동 후, 현재 디렉토리에 gz으로 압축된 파일 압축해제
#gunzip 0??1.gz
현재 디렉토리에 위치한 모든 파일의 이름뒤에 확장자 .perm 붙이기
이름 변경하기
mv [원본] [대상]
0000 ~ 7777 -> 0000.perm ~ 7777.perm
# ls | xargs -t -i mv {} {}.perm
#du -sh /*
#rm -rf ./*
rm -r ./0001 0002 이렇게 아규먼트가 늘어나는방향
#ls | xargs rm
rm 0000
rm 0001 하나하나 다지움
원상복구
#ls | cut -d "." -f 1 | xargs -t -i mv {}.perm {}