rm -f를 통해 glob 모드를 사용하여 삭제할 때 어떤 파일이 먼저 삭제되나요?

rm -f를 통해 glob 모드를 사용하여 삭제할 때 어떤 파일이 먼저 삭제되나요?

다음 패턴을 가진 수천 개의 파일이 포함된 폴더가 있습니다. YYYYMMDD_HH24MISS_4DIGITSEQUENCE.

예: 20180626_210123_0001.

예를 들어 이제 명령을 통해 삭제하면 rm -f *20180626_1*제대로 작동합니다.

내 질문은 다음과 같습니다. 1. 어떤 파일을 먼저 삭제해야 합니까? 2. 무작위로 선택되나요? 3. 선택에 있어 어떤 순서를 유지한다면 어느 것을 선택하고 어떻게 결정합니까?

답변1

쉘은 Glob을 사전순으로(현재 로케일에서) 확장하고 rm구현은 다음과 같습니다.가능한인수로 얻은 파일을 얻은 순서와 동일한 순서로 삭제합니다. 따라서 귀하의 경우 파일은 가장 오래된 것부터 삭제됩니다.

글로브 결과 정렬POSIX 요구 사항. 빠른 테스트에서 최소한 GNU rm은 명령줄에 나열된 파일을 나열된 순서대로 제거하고 재귀 작업 중에 발견된 파일을 정렬하지 않습니다.

답변2

셸은 실행 전에 표현식을 확장하며 rm확장은 명령에만 국한되지 않으므로 다음을 수행합니다.

echo *20180626_1*

그러면 첫 번째 echo 항목이 쉘에 전달되는 첫 번째 항목이 됩니다 rm. 순서는 무작위가 아니고 알파벳 순입니다. Bash 매뉴얼 페이지에서:

단어 분할 후 bash는 -f 옵션이 설정되지 않은 한 각 단어에서 *, ? 및 [ 문자를 검색합니다. 이러한 문자 중 하나가 발생하면 해당 단어는 패턴으로 처리되고 패턴과 일치하는 파일 이름의 알파벳순 목록으로 대체됩니다.

관련 정보