리눅스 특정 폴더 및 파일 제외 명령어?
본문
에를 들어,
현재폴더에서 data 폴더와 config.php 파일을 제외하고 모두 삭제하고자 할 때
어떤 식으로 명령어를 입력해주면 되는지?
답변 8
// php 로 만들어 보았습니다.
class Remove {
public $scanned_dir = array();
public $result = array();
function __construct() {
$this->scanned_dir = $this->scan_dir('*');
}
function scan_dir($pattern, $flags = 0) {
$files = glob($pattern, $flags);
foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR|GLOB_NOSORT) as $dir)
$files = array_merge($files, $this->scan_dir($dir.'/'.basename($pattern), $flags));
return $files;
}
function remove($remain_dir, $remain_file) {
foreach ($this->scanned_dir as $file) {
if (basename(__FILE__) == $file) continue;
$flag = true;
if (is_dir($file)) {
foreach ($remain_dir as $v) {
if (strpos($file, $v) !== false) {
$flag = false;
break;
}
}
if ($flag) rmdir($file);
} else {
foreach ($remain_dir as $v) {
if (preg_match("#/$v#", $file)) {
$flag = false;
break;
}
}
foreach ($remain_file as $v) {
if ($v == $file) {
$flag = false;
break;
}
}
if ($flag) unlink($file);
}
if ($flag) $this->result[] = $file;
}
$this->show();
}
function show() {
echo implode('<br>', $this->result);
}
}
$remain_dir = array('a', 'b', 'data');
$remain_file = array('c.txt', 'config.txt');
$rm = new Remove();
$rm->remove($remain_dir, $remain_file);
http://blog.naver.com/PostView.nhn?blogId=beahey&logNo=90097133614
참고하시면 될것 같습니다.
혹시 모르니 백업후 실행하시는게 좋을거 같습니다.
그러면 이글 참조해보십시요.
위험하게 리눅스에서하지마시고 대부분폴더를지우실꺼면..그냥 FTP로 DATA폴더 받아서
윈도우에서 그냥 필요없는애들 다지우고 쓸애들만 업로드후 권한설정하는게 편하실수도있어요~
서버는잘모를때 잘못만지면 다날라가니 ㅎㅎ
find . ! -name 'config.php' -type f -exec rm -f {} +
특정 파일 (Config.php)를 제외하고 삭제합니다 -rf 로 바꾸시면 디렉토리도 삭제 가능할거라보입니다.
@sinbi 죄송합니다 글의 의미를 제대로 파악하지 못했네요.
find [path] -type f -not -name 'textfile.txt' -not -name 'backup.tar.gz' -delete
계속 -not -name 을 추가하시는 방법도 있고..
find . -type f -not -name '*txt' -print0 | xargs -0 rm --
이경우에는 확장자 별로 분류가 가능합니다.
죄송합니다! 맞는 답변이 달려 다행이네요..!!
답변을 작성하시기 전에 로그인 해주세요.