だからどういうわけか、コマンドls
はディレクトリ内の2つの同一のファイルを表示しているようです。
$ 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
ファイルの1つを移動、名前変更、編集などできますが、もう1つはそこにあるようにも見えません。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
うーん...いいえ、完了し
—
fredtantini
ls test\
ます...使用するとどうなりますls "*tftp.list*"
か またはとls
一緒に使用し--show-control-chars
ますか?
次のような、
—
チョロバ
echo tftp* | xxd
または他のhexdump を実行できますか?
の出力は
—
クリスダウン
printf '<%q>\n' tftp*
何ですか?
あなたのロケールがあるので
—
マークPlotnick
en_US.UTF-8
、ls -b
途中でまたはファイル名の末尾のかどうか、任意の特別な方法でファイル名に空白が表示されません。あなたは答えの一つ(のprintf、エコー)、またはフィルタのようなハイライト末尾の空白に設計されたプログラムでのlsの出力を使用することができますls -1 tftp* | cat -vet