그래서 어떻게 든 명령 ls
이 디렉토리에 동일한 두 개의 파일을 표시하는 것 같습니다.
$ ls -Blah /System/Library/LaunchDaemons
total 32
drwxr-xr-x 266 root wheel 8.8K Jun 18 10:41 .
drwxr-xr-x 79 root wheel 2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r-- 1 root wheel 715B Jun 18 10:36 tftp.plist
-rw-r--r-- 1 root wheel 715B Jun 18 10:35 tftp.plist
파일 중 하나를 이동, 이름 바꾸기, 편집 등 할 수는 있지만 다른 파일은 존재하지 않는 것 같습니다. bash
탭 완성도 동일한 파일을 보여줍니다.
예를 들어 다음을 입력 한 다음 TAB
$ sudo mv /System/Library/LaunchDaemons/tftp
tftp.plist tftp.plist
파일 이름을 바꾸면 :
$ sudo mv /System/Library/LaunchDaemons/tftp.plist /System/Library/LaunchDaemons/tftp.plist.derp
탭 완성에는 여전히 파일이 표시됩니다.
$ ls -Blah /System/Library/LaunchDaemons/tf
tftp.plist tftp.plist.derp
그러나 수정되지 않은 원본 파일은 'ls'로 표시되지 않습니다
$ ls -Blah /System/Library/LaunchDaemons/tftp.plist
ls: /System/Library/LaunchDaemons/tftp.plist: No such file or directory
그러나 위의 첫 번째 코드 스 니펫과 같이 파일을 나열하면 보라.
$ ls -Blah /System/Library/LaunchDaemons
total 32
drwxr-xr-x 266 root wheel 8.8K Jun 18 10:41 .
drwxr-xr-x 79 root wheel 2.6K Mar 31 12:28 ..
[redacted]
-rw-r--r-- 1 root wheel 715B Jun 18 10:35 tftp.plist
-rw-r--r-- 1 root wheel 715B Jun 18 10:36 tftp.plist.derp
여기서 무슨 일이 일어나고 어떻게이 유령 파일을 제거 할 수 있습니까?
문제에 정보를 추가하면 OS X를 실행하는 Mac입니다. 나는 sed
이 파일 을 사용 하기 시작했고 바로이 순간이 시작되었습니다.
편집하다
나는 둘 다 사용했습니다 blah
과 Blah
ls
명백한 출력의 변화없이 플래그.
편집 2
의견으로 요청 된 추가 정보 :
$ echo tftp* | xxd
0000000: 7466 7470 2e70 6c69 7374 2020 7466 7470 tftp.plist tftp
0000010: 2e70 6c69 7374 2e64 6572 700a .plist.derp.
더:
$ printf '<%q>\n' tftp*
<tftp.plist\ >
<tftp.plist.derp>
더 나아가:
$ locale │-rw-r--r-- 1 root wheel 495B Sep 9 2014 org.net-snmp.snmpd.plist
LANG="en_US.UTF-8" │-rw-r--r-- 1 root wheel 498B Jan 15 23:15 org.ntp.ntpd.plist
LC_COLLATE="en_US.UTF-8" │-rw-r--r-- 1 root wheel 1.0K Nov 13 2014 org.openldap.slapd.plist
LC_CTYPE="en_US.UTF-8" │-rw-r--r-- 1 root wheel 572B Sep 9 2014 org.postfix.master.plist
LC_MESSAGES="en_US.UTF-8" │-rw-r--r-- 1 root wheel 238B Sep 9 2014 shell.plist
LC_MONETARY="en_US.UTF-8" │-rw-r--r-- 1 root wheel 941B Sep 9 2014 ssh.plist
LC_NUMERIC="en_US.UTF-8" │-rw-r--r-- 1 root wheel 260B Sep 9 2014 telnet.plist
LC_TIME="en_US.UTF-8" │-rw-r--r-- 1 root wheel 715B Jun 18 10:36 tftp.plist
LC_ALL="en_US.UTF-8"
노트
아래의 답변은 이름에 후행 공백이 있음을 알 수 있도록 도와줍니다.
6
이름에 후행 공백이있을 수 있습니까?
—
fredtantini 2016 년
흠… 아니오, 완성은 할 것입니다
—
fredtantini 2016 년
ls test\
… 사용하면 ls "*tftp.list*"
어떻게됩니까? 또는 사용 ls
으로 --show-control-chars
?
같은
—
choroba 2016 년
echo tftp* | xxd
또는 다른 hexdump 를 실행할 수 있습니까 ?
출력은
—
Chris Down
printf '<%q>\n' tftp*
무엇입니까?
로케일이기 때문에
—
Mark Plotnick
en_US.UTF-8
, ls -b
중간에 또는 파일 이름의 끝 부분에 있는지, 어떤 특별한 방법으로 파일 이름에 공백을 표시하지 않습니다. 다음과 같은 후행 공백을 강조하도록 설계된 프로그램으로 응답 (printf, echo) 또는 filter ls의 출력 중 하나를 사용할 수 있습니다.ls -1 tftp* | cat -vet