programing

Linux에서 Bash에서 여러 파일을 한 번에 삭제하려면 어떻게 해야 합니까?

sourcejob 2023. 4. 14. 21:40
반응형

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

반응형