同名文件夹中的两个文件 - 需要删除一个但不能同时删除两个文件

Mag*_*ddy 4 ls rm sco

我们似乎在/var/spool/lp/logs名为“requests”的文件夹中有两个文件。一个由 lp 拥有,另一个由 root 拥有。

我们需要删除 root 拥有的请求文件 - 我们如何引用它?

这是ls -l命令的输出:

-rw-r--r--   1 root     sys            0 Jan 30  2014 lp                 
-rw-rw----   1 root     lp          6584 Nov  4 06:10 lpsched            
-rw-rw----   1 lp       lp          3365 Dec 14 10:56 requests           
-rw-r--r--   1 root     sys      1668416 Dec 14 10:41 requests           
drwxr-xr-x   2 root     sys         1024 Sep 30  2013 requests.archives  
Run Code Online (Sandbox Code Playgroud)

Jef*_*ler 11

如果您有 GNU ls,则可以运行ls -lQ以查看文件名的引用版本:

$ ls -lQ
total 0
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests"
-rw-r--r--. 1 user group 0 Dec 14 14:32 "requests "
Run Code Online (Sandbox Code Playgroud)

要删除特定文件,首先使用以下命令查找其 inode 编号ls -li

$ touch 'requests' 'requests '
$ ls -li
total 0
440 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
441 -rw-r--r--. 1 user group 0 Dec 14 14:32 requests
Run Code Online (Sandbox Code Playgroud)

这里我们有两个相似的文件,一个有 inode 440,另一个有 441(左栏)。

对于您的情况,找到 root 拥有的文件并获取该 inode 编号。该-xdev(或-mount)选项,find说留在同一个文件系统,以防万一你有安装在当前目录下的一个文件系统,以避免受凉在孩子文件系统匹配的任何文件。

然后:

$ find . -inum 441 -xdev -user root -ls
441    0 -rw-r--r--   1 user group 0 Dec 14 14:32 ./requests\
Run Code Online (Sandbox Code Playgroud)

请注意,find在末尾引用了空格字符。

并删除:

$ find . -inum 441 -xdev -user root -delete  # GNU find
Run Code Online (Sandbox Code Playgroud)

或者

$ find . -inum 441 -xdev -user root -exec rm {} \;  # otherwise
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 6

同一个文件夹中不能有两个同名的文件。很可能其中有一个不可见的字符(例如尾随空格)。

我的建议是重命名requestsrequests.real,然后运行交互式删除。您可以选择删除不需要的一个,然后(如有必要)使用通配符将另一个重命名为正确的名称

mv requests requests.real             # STOP if this fails
mv requests.archives KEEP.archives    # Temporary
rm -i req*                            # Interactive delete: "y" to delete, "n" to skip
mv req* requests                      # Rename whatever's left that begins "req"
mv KEEP.archives requests.archives    # Put this one back again
Run Code Online (Sandbox Code Playgroud)