【问题标题】:How to handle files with leading dashes [closed]如何处理带有前导破折号的文件[关闭]
【发布时间】:2021-08-11 17:26:06
【问题描述】:

我正在使用find 搜索文件和目录,这些文件的文件名中有前导破折号:

ls -al

total 0
-rw-r--r--   1 razhal  staff    0 May 22 23:58 -x
drwxr-xr-x   3 razhal  staff   96 May 22 23:58 .
drwxr-xr-x  12 razhal  staff  384 May 22 17:06 ..


find * -maxdepth 1 -type file

上面给出了以下错误信息:

发现:非法选项--m

我尝试使用-- 终止选项,但仍然遇到同样的问题:

find * -maxdepth 1 -type file --

奇怪的是,如果文件夹包含一个没有前导破折号的文件,我不会收到错误消息:

ls -al

total 0
-rw-r--r--   1 razhal  staff    0 May 22 23:58 -x
drwxr-xr-x   3 razhal  staff   96 May 22 23:58 .
drwxr-xr-x  12 razhal  staff  384 May 22 17:06 ..
-rw-r--r--   1 razhal  staff    0 May 23 00:03 x

find * -maxdepth 1 -type file

上面返回x,没有错误信息。

我的问题是如何使用find 查找和列出带有和不带有前导破折号的文件/目录?

请注意,我真的想使用 find 而不是其他一些命令,例如 xargs 或类似的。

【问题讨论】:

  • Find 通常是给定目录名来搜索,而不是像你正在做的文件名...使用. 而不是扩展为当前目录中所有文件的通配符?
  • 不知道为什么关闭,因为我仍然无法处理带有前导破折号的文件或目录?

标签: linux shell file find


【解决方案1】:

使用. 代替*

find . -maxdepth 1 -type file

.指的是你当前所在的文件夹。你也可以用..代替.从父目录搜索。

另一种选择是将./ 放在* 前面,如下所示:

find ./* -maxdepth 1 -type file

这样它就不会将名称以破折号开头的文件解释为选项。

【讨论】:

  • 只使用'.'正如评论中提出的那样似乎也有效,但是我还有另一个问题,因为找到的文件名也包含./ 部分,我只想获取文件名,所以我可以做这样的事情find ./* -type file -exec mv {} temp{} \;
  • 这对你有用吗? find . <flags> -printf '%f\n' | xargs -I{} mv {} temp{}
  • 就像我说的,我只想使用 find 而没有其他命令,例如 xargs 或类似的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多