Linux에서 Bash에서 여러 파일을 한 번에 삭제하려면 어떻게 해야 합니까?
Linux 서버의 파일 목록은 다음과 같습니다.
abc.log.2012-03-14
abc.log.2012-03-27
abc.log.2012-03-28
abc.log.2012-03-29
abc.log.2012-03-30
abc.log.2012-04-02
abc.log.2012-04-04
abc.log.2012-04-05
abc.log.2012-04-09
abc.log.2012-04-10
때 rm -rf이하를 참조해 주세요.
rm -rf abc.log.2012-03-14
rm -rf abc.log.2012-03-27
rm -rf abc.log.2012-03-28
선택한 파일을 한 번에 삭제할 수 있는 다른 방법이 있습니까?
Bash는 모든 종류의 와일드카드 및 확장을 지원합니다.
정확한 케이스는 다음과 같이 브레이스 확장에 의해 처리됩니다.
$ rm -rf abc.log.2012-03-{14,27,28}
위의 명령어는 3개의 인수를 모두 가진 단일 명령어로 확장되며 다음과 같이 입력합니다.
$ rm -rf abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28
그 전에 실시된다는 점에 주의해 주십시오.rm로딩되어 있습니다.
를 합니다.*여러 파일을 대조합니다.
를 들어,이 를, 음, 음, 음 등으로 하는 모든 합니다.abc.log.2012-03-.
rm -f abc.log.2012-03-*
ls abc.log.2012-03-*한 후 를 실행합니다.rm명령어를 입력합니다.
자세한 내용은 파일 이름 확장의 Bash man 페이지를 참조하십시오.
이름이 특정 양식과 일치하는 파일을 모두 삭제하려면 와일드카드(글로브 패턴)가 가장 간단한 솔루션입니다.몇 가지 예:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
하며, 와일드카드보다 더 강력하며, 보다 더 한 출력을 제공할 수 .grep로로 합니다.rm -f가 「」로 되어 경우는, 「」라고 하는 파일명이 있습니다."abc.log"를 가진 사람도 있다"ABC.log",grep그럼 대소문자를 구분하지 않습니다.
$ rm -f $(ls | grep -i '^abc\.log\.')
이로 인해 파일 이름에 공백 등 재미있는 문자가 포함된 경우 문제가 발생합니다.조심하세요.
할 는, 「 」, 「 」를 실행합니다.ls | grep ...명령어를 먼저 실행하여 원하는 출력을 생성하는지 확인합니다.특히,rm -f:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
서 ''는!!는 이전 명령어로 전개됩니다. 또는 하여 Ctrl+P를 할 수 .rm -f명령어를 입력합니다.
이것은 bash 셸을 사용하고 있는 것을 전제로 하고 있습니다. 다른 셸, 및 은 ,른른른른른른른, csh tc tcsh shsh sh the the the the the the sh the the the the the the the the the the the를 하지 않을 수 .$(...)구문을 사용합니다.백틱
$ rm -f `ls | grep -i '^abc\.log\.'`
$(...)구문은 읽기 쉽고, 정말로 야심차면 내포될 수 있습니다.
마지막으로 삭제할 파일의 서브셋을 정규 표현으로 쉽게 표현할 수 없는 경우 임시 텍스트 파일에 파일을 나열한 다음 편집하는 방법을 자주 사용합니다.
$ ls > list
$ vi list # Use your favorite text editor
도 할 수 있어요.list수동으로 파일을 작성하고 삭제할 파일만 남겨둔 후 다음을 수행합니다.
$ rm -f $(<list)
또는
$ rm -f `cat list`
(이것은, 파일명에 재미있는 문자(특히 공백)가 포함되어 있지 않은 것을 전제로 하고 있습니다).
또는 편집 시list파일, 추가할 수 있습니다.rm -f 각 행의 선두에 도달한 후 다음을 수행합니다.
$ . ./list
또는
$ source ./list
파일 편집은 필요에 따라 따옴표를 추가할 수도 있습니다(예: 변경).rm -f foo bar로.rm -f 'foo bar'.
하위 라임에서 여러 줄 선택을 사용하여 모든 파일을 한 줄로 묶고 각 파일 이름 사이에 공백을 추가한 다음 추가하세요.rm리스트의 선두에 있습니다.이 기능은 대부분 삭제할 파일 이름에 패턴이 없을 때 유용합니다.
[$]> rm abc.log.2012-03-14 abc.log.2012-03-27 abc.log.2012-03-28 abc.log.2012-03-29 abc.log.2012-03-30 abc.log.2012-04-02 abc.log.2012-04-04 abc.log.2012-04-05 abc.log.2012-04-09 abc.log.2012-04-10
여기에는 와일드카드가 적합합니다만, 안전을 위해 와일드카드 사용을 가능한 한 최소한으로 억제하는 것이 가장 좋기 때문에, 다음과 같은 방법이 있습니다.
rm -rf abc.log.2012-*
겉으로 보기에는 그건 하나의 파일인가요?이러한 항목 중 디렉터리가 없는 경우에는 재귀 옵션이 필요하지 않으므로 안전을 위해 사용하지 않는 것이 좋습니다.
저는 Linux 전문가가 아닙니다만, 출력 파일 목록을 다음 주소로 파이핑하고 싶다고 생각합니다.xargs rm -rf예전에 이런 걸 써봤는데 좋은 결과가 나왔어요.먼저 샘플 디렉토리에서 테스트합니다!
편집 - 표시되는 다른 답변으로 미루어 봤을 때 제가 잘못 이해한 것 같습니다.와일드카드를 사용할 수 있다면 좋습니다.당신이 보여준 원래 리스트는 당신의 "선택"을 주기 위한 프로그램에 의해 생성된 것이라고 생각했기 때문에, 나는 파이핑하여xargs가는 길이라고 생각합니다.
디렉토리에 속하는 모든 파일을 한 번에 삭제할 경우.예를 들어 디렉토리 이름은 "log"이고 "log" 디렉토리에는 abc.log.2012-03-14, abc.log.2012-03-15, ...가 포함됩니다.기타 파일.로그 디렉토리 위에 있어야 합니다.
rm -rf /log/*
언급URL : https://stackoverflow.com/questions/10516384/how-to-delete-multiple-files-at-once-in-bash-on-linux
'programing' 카테고리의 다른 글
| 특정 파일을 변경한 모든 커밋을 나열하려면 어떻게 해야 합니까? (0) | 2023.04.14 |
|---|---|
| 동적 셀 액세스 (0) | 2023.04.14 |
| 다음 코드에서의 sys.sp_addextended property 사용에 대해 설명해 주시겠습니까? (0) | 2023.04.14 |
| 숫자 숨김 값이 포함된 텍스트를 표시하는 Excel 드롭다운 목록을 만드는 방법 (0) | 2023.04.14 |
| Swift와 C++를 혼합할 수 있나요?Objective-C .mm 파일처럼 (0) | 2023.04.14 |