* .swo 검색


6

나는 이것이 쉬운 것이어야한다고 생각하지만, 그것은 나를 곤란하게 만든다.

다음을 사용하면 파일을 찾습니다.

$ ls -al  .bash_*.sw*   
-rw-r--r--  1 damiensawyer  staff  12288 27 Nov 07:39 .bash_profile.swo

그러나 이것을 사용할 때 찾지 못합니다.

$ ls -al *.sw*      
ls: *.sw*: No such file or directory

나는 두 번째 명령도 반환 할 것으로 기대했다. .bash_profile.swo. 내가 뭘 놓치고 있니?

답변:


5

사용 ls

문제는 파일에 점이 하나가 아니라 두 개의 점이 있다는 것입니다. 다음 사항을 고려해야합니다.

ls -al .*.sw*

점으로 시작하는 파일 (보이지 않는 파일)과 일치합니다. .DS_Store ) 그리고 또한로 끝난다. .sw*.

.swa 만큼 잘 .swz 일치 할 것입니다.


사용 find

다음을 사용하여 동일한 확장명을 가진 모든 파일을 찾을 수 있습니다 ( swo 아래의 경우)를 디렉토리에 저장하십시오.

find ~ -iname *swo

-iname 대 / 소문자를 구분하지 않는 일치를 찾습니다.


다음을 사용하여 특정 파일을 검색 할 수 있습니다.

find .bash_*.sw*

주 : ~ 경로는 전체 홈 디렉토리를 검색합니다.


고마워. 나는 find를 사용하는 것을 알고있다. 제가 작동하지 않는 이유가 있는지 궁금합니다. 그것은 ls의 한계입니까?
Damien Sawyer

나는 내 대답을 편집했다. @DamienSawyer
Zach Gates

시원한. 그래서, 이것으로부터의 테이크 아웃은 '별이 시대와 일치하지 않아야'합니다.
Damien Sawyer

그것 ~하다 마침표와 일치하지만 첫 번째 마침표 이후의 모든 것이 일치해야하는 부분이라고 가정합니다. sw*. @DamienSawyer
Zach Gates

사실, 그것은 문제가되는 "두 점"이 아니며, 첫 번째 점이 첫 번째 문자라는 사실이 사실입니다. Unix에서는 파일 숨기기 규칙입니다. .sw 이것은 "숨겨진"파일이 아니기 때문에 red.and.joe.are.sworn.enemies와 일치합니다.
Paul Wagland

6

이것은 실제로 발생하지 않습니다. ls이후 ls 패턴을 확장하지 않습니다.

glob 패턴을 확장하는 방법에 대한 결정 ( *? )입니다. 껍질로 만든 . 당신의 껍질은 가장 가능성이 높습니다. bash.

기본적으로 bash 수행하지 못함 경로 확장 on dotfiles. 그러나 명시 적으로 문서를 작성하거나 . (이미 발견 한대로) 또는 dotglob 선택권. bash 맨 페이지에서 :

닷 글로브 설정되면 bash는`. '로 시작하는 파일명을 포함합니다. 경로명 확장 결과

시연하기 위해 다음과 같이 확장을 인쇄 해 봅시다. echo 대신에 ls:

$ touch .bash_profile.swo

$ echo .*.swo
.bash_profile.swo

$ echo *.swo
*.swo

$ shopt -s dotglob

$ echo *.swo
.bash_profile.swo

더 많은 논의가있다. 이리 .


3

문제는 ls 다음으로 시작하는 파일 만 표시합니다. . 당신은 명시 적으로 첫 번째 . glob 파일에.

따라서 다음과 같이 작동합니다.

ls .*swo

유닉스 쉘은 전에 glob을 확장한다. ls 파일 이름을 봅니다.


고마워. 실제로 시도해 보았지만 첫 번째 샘플이 작동하지 않는 것으로 보입니다. 나는 당신에게 앞선 시대가 필요하다고 생각합니다.
Damien Sawyer

이봐, 너는 '최악'대신에 '첫 번째'를 의미 했습니까?
Damien Sawyer

2

이러한 패턴 ( *.sw* 등)은 다음과 같이 알려져있다. 그물 .

@Mark와 @Zach Gates가 지적했듯이, 글로브는 명시 적으로 포함하지 않는 한 마침표로 시작하는 파일과 일치하지 않습니다. . 패턴의 시작 부분에. 이는 UNIX 계열 시스템 (예 : OS X)에서 점으로 시작하는 파일이 '숨김'파일로 간주되어 일반적으로 기본적으로 표시되지 않기 때문입니다.

Glob 일치는 쉘에 의해 실제로 수행됩니다 ( bash 기본적으로), 개별 명령 (예 : ls. bash 매뉴얼에서 파일 이름 확장 :

단어 분리 후 ... 배쉬는 문자 ' * ',' ? ',' [ '. 이러한 문자 중 하나가 나타나면 해당 단어가 패턴으로 간주되어 패턴과 일치하는 알파벳 순으로 정렬 된 파일 이름 목록으로 바뀝니다 (패턴 일치 참조). 일치하는 파일 이름이 없으면 단어는 변경되지 않습니다.

파일 이름 확장에 패턴을 사용하면 문자 ' . '파일 이름의 시작 부분이나 슬래시 바로 뒤에 오는 부분은 명시 적으로 일치해야합니다. 쉘 옵션 dotglob 설정됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.