출처는 channel.net의 산이형 홈페이지에서 퍼왔습니다.
#! /usr/bin/perl -w
# PERL Scripted by bando
# DATE : 20040805
# Mail : bando(0x40)bando.org
# MSN : bando(0x40)bando.org
# 특정 경로이하 또는 파일에서 특정 문자열을 원하는 문자열로 변경하는 펄 스크립트
if ( $#ARGV != 2 ) {
&Usage();
}
$Chan_path = $ARGV[0];
$Chan_ch = $ARGV[1];
$Chand_ch = $ARGV[2];
$total = 0;
if ( ! -e $Chan_path) {
print "$Chan_path 와 같은 파일이나 디렉토리는 없습니다!\n";
exit 1;
}
@arry = `grep "$Chan_ch" -l -r $Chan_path`;
foreach(0..$#arry) {
$arry[$_] =~ s/\&/\\&/g;
$arry[$_] =~ s/\(/\\(/g;
$arry[$_] =~ s/\)/\\)/g;
chomp($arry[$_]);
`perl -p -i -e 's/$Chan_ch/$Chand_ch/g' $arry[$_]`;
print "$arry[$_] : $Chan_ch => $Chand_ch [OK]\n";
$total++;
}
print "\nTOTAL : $total 개 변경됨!\n\n";
sub Usage {
print "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n";
print "사용법 : $0 [이 경로이하 또는 파일에서] [이 문자열을] [이 문자열로 변경]\n\n";
print "설명 : 일치하는 문자열을 특정 문자열로 변경한다.\n";
print "예제 : $0 /home localhost 127.0.0.1\n";
print "결과 : /home 디렉토리 이하의 모든 파일에서 localhost문자열을 127.0.0.1문자열로 변경한다.\n";
print "\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n";
exit;
}
'find'에 해당되는 글 3건
- 2008/09/08 특정 경로 이하의 모든 파일의 문자열을 원하는 문자열로 변경하는 펄 스크립트
- 2008/09/08 큰 용량 찾기 + 특정단어 한번에 변경
- 2008/09/08 find 명령어를 배워봅시다
Posted on 2008/09/08 13:03
Filed Under [1] IT 관련/2. Linux
Posted on 2008/09/08 13:01
Filed Under [1] IT 관련/2. Linux
리눅스를 사용하다보면 가장 큰 용량을 찾아서 정리해야 할 경우 아래와 같이 하면
쉽게 구별해 낼 수 있습니다.
* 디렉토리에서 가장 큰 용량 찾기
du -x --exclude=/home | sort -g | tail -n 5
* 파일내에 특정단어 한번에 변경하기
perl -pi -e 's/home/home2/g' *
해설 : home이라는 단어가 있으면 home2로 변경하라는 뜻
쉽게 구별해 낼 수 있습니다.
* 디렉토리에서 가장 큰 용량 찾기
du -x --exclude=/home | sort -g | tail -n 5
* 파일내에 특정단어 한번에 변경하기
perl -pi -e 's/home/home2/g' *
해설 : home이라는 단어가 있으면 home2로 변경하라는 뜻
Posted on 2008/09/08 12:57
Filed Under [1] IT 관련/2. Linux
리눅스 쉘상에서 특정파일이나 디렉토리를 찾는것을 알아보자!
의외로 간단하다.
공통된 문법(?)의 시작은
---------------------------------------
find [경로] -name [파일] -print
---------------------------------------
-----------------------------------------------------------------
옵션 기능
-----------------------------------------------------------------
- atime N n일 전에 액세스(access)된 파일을 찾습니다.
- mtime N n일 전에 수정(modify)된 파일을 찾습니다.
- newer USR file보다 늦게 수정된 파일을 찾습니다.
- size n n*512 바이트 길이를 가지는 파일을 찾습니다.
- name WORD 파일 이름으로 검색합니다. 이름에는 메타 문자(*, ?, [])를
사용할 수 있습니다.
- perm MODE 퍼미션으로 검색합니다. (-perm +2000)
- type LETTER 파일형식으로 검색합니다. f는 보통 파일, d는 디렉토리
파일을 의미합니다.
- user USR 사용자 이름이 usr인 파일을 찾습니다.
- nouser 파일 소유자 이름이 등록되어 있지 않은 파일을 찾습니다.
- nogrp 파일 소유 그룹 이름이 등록되어 있지 않은 파일을 찾습니다.
- exec CMD 명령(CMD)을 실행합니다. 명령행의 끝은 반드시 \; 로
닫아 주어야 합니다. 현재 찾은 파일이름의 배열을 {}로 입력으로 사용할 수 있습니다.
아래 명령은 확장자가 bak인 모든 파일을 찾아 삭제합니다.
find ./ -name '*.bak' -exec rm -f {} \;
- ok CMD 명령을 실행하기 전에 사용자 입력을 기다립니다.
- print 표준출력(stdout)으로 출력합니다. 기본설정입니다.
- ptint0 -print와 같이 동작하지만 출력의 끝에 개행문자를 붙이지 않습니다.
- fprint FILE -print와 같이 동작하면서 출력을 지정한 파일로 보냅니다.
- printf FORM c 스타일의 포맷을 사용하여 출력합니다.
man 3 printf
- ls ls -dils 형식으로 파일 정보를 자세히 출력합니다.
- fls -ls 와 같이 동작하면서 출력을 지정한 파일로 보냅니다.
-----------------------------------------------------------------
약간의 설명을 붙이자면 경로는 절대경로와 상대경로모두 사용할 수 있다.
그럼 아래 설명을 보자
* 현재 디렉토리에서 특정파일찾기
find . -name rsync -print
현재 디렉토리에서 rsync파일이름을 출력하라!.만약 없다면 아무것도 출력하지 않는다.
위에서 "."이 부분을 잘보자
* 홈 디렉토리 안에있는 파일찾기
find ~/ -name README -print
현재 자신의 홈 디렉토리와 그 하위모든디렉토리를 대상으로 README파일을 찾아서
그 결과를 보여준다.
* 현재 디렉토리에서 여러파일 찾기
find . -name '*.conf' -print
현재 디렉토리에서 .conf로 끝나는 파일을 파일을 찾아준다.
* 디렉토리 찾기
find /usr/local -name gnu -type d -print
/usr/local 디렉토리를 기준으로 그 하위 디렉토리인 gnu디렉토리를 찾는다
의외로 간단하다.
공통된 문법(?)의 시작은
---------------------------------------
find [경로] -name [파일] -print
---------------------------------------
-----------------------------------------------------------------
옵션 기능
-----------------------------------------------------------------
- atime N n일 전에 액세스(access)된 파일을 찾습니다.
- mtime N n일 전에 수정(modify)된 파일을 찾습니다.
- newer USR file보다 늦게 수정된 파일을 찾습니다.
- size n n*512 바이트 길이를 가지는 파일을 찾습니다.
- name WORD 파일 이름으로 검색합니다. 이름에는 메타 문자(*, ?, [])를
사용할 수 있습니다.
- perm MODE 퍼미션으로 검색합니다. (-perm +2000)
- type LETTER 파일형식으로 검색합니다. f는 보통 파일, d는 디렉토리
파일을 의미합니다.
- user USR 사용자 이름이 usr인 파일을 찾습니다.
- nouser 파일 소유자 이름이 등록되어 있지 않은 파일을 찾습니다.
- nogrp 파일 소유 그룹 이름이 등록되어 있지 않은 파일을 찾습니다.
- exec CMD 명령(CMD)을 실행합니다. 명령행의 끝은 반드시 \; 로
닫아 주어야 합니다. 현재 찾은 파일이름의 배열을 {}로 입력으로 사용할 수 있습니다.
아래 명령은 확장자가 bak인 모든 파일을 찾아 삭제합니다.
find ./ -name '*.bak' -exec rm -f {} \;
- ok CMD 명령을 실행하기 전에 사용자 입력을 기다립니다.
- print 표준출력(stdout)으로 출력합니다. 기본설정입니다.
- ptint0 -print와 같이 동작하지만 출력의 끝에 개행문자를 붙이지 않습니다.
- fprint FILE -print와 같이 동작하면서 출력을 지정한 파일로 보냅니다.
- printf FORM c 스타일의 포맷을 사용하여 출력합니다.
man 3 printf
- ls ls -dils 형식으로 파일 정보를 자세히 출력합니다.
- fls -ls 와 같이 동작하면서 출력을 지정한 파일로 보냅니다.
-----------------------------------------------------------------
약간의 설명을 붙이자면 경로는 절대경로와 상대경로모두 사용할 수 있다.
그럼 아래 설명을 보자
* 현재 디렉토리에서 특정파일찾기
find . -name rsync -print
현재 디렉토리에서 rsync파일이름을 출력하라!.만약 없다면 아무것도 출력하지 않는다.
위에서 "."이 부분을 잘보자
* 홈 디렉토리 안에있는 파일찾기
find ~/ -name README -print
현재 자신의 홈 디렉토리와 그 하위모든디렉토리를 대상으로 README파일을 찾아서
그 결과를 보여준다.
* 현재 디렉토리에서 여러파일 찾기
find . -name '*.conf' -print
현재 디렉토리에서 .conf로 끝나는 파일을 파일을 찾아준다.
* 디렉토리 찾기
find /usr/local -name gnu -type d -print
/usr/local 디렉토리를 기준으로 그 하위 디렉토리인 gnu디렉토리를 찾는다
