使用 LFTP 的“find”尝试访问参数

使用 LFTP 的“find”尝试访问参数

我通过连接lftp -u username, sftp://server.name.com:/directory安全FTP-server,其运行正常。

无论如何,我想使用find. -name *someWildcardExpression -type f -delete来删除目录及其子目录中的所有文件。实际上,find找到所有相关文件。但是,它还尝试访问传递给 的参数创建的目录find

lftp [email protected]:/directory> find . -name *someWildcardExpression -type f

# Output
./
./file_a.csv.gz.gpg
./subdir/
./subdir/file_a.csv.gz.gpg
./subdir/file_b.csv.gz.gpg
./subdir/file_c.csv.gz.gpg
find: No such file (/directory/-name)
find: No such file (/directory/*someWildcardExpression )
find: No such file (/directory/-type)
find: No such file (/directory/f)

这似乎不对。是我使用find-command 错误,还是这是一个错误?

答案1

我是否find错误地使用了 -command,或者这是一个错误?

你用错了,因为它不是find你认为的 -command。你在里面lftp,而不是在通用 shell 中。你不是调用find(1)兼容POSIXfind,您可以通过在 shell 中运行来阅读其手册。您正在调用其的man 1 find一部分lftp手动的内容如下:

find [OPTS] directory...

递归列出目录中的文件(默认为当前目录)。这可以帮助缺乏ls -R支持的服务器。您可以重定向此命令的输出。

选项:

-d MD--max-depth=MD 指定最大扫描深度
-l--ls使用长列表格式

没有其他选项。这就是为什么您使用的每个“选项”都被视为目录。

lftp允许您通过在命令前添加 来运行任意 shell 命令!,但它将在本地(lftp运行的位置)运行该命令,而不是在服务器上运行。您似乎想find在服务器上运行。

您可以执行以下操作:

  1. 使用findinsidelftp而不使用它无法理解的语法,在本地解析其输出以模仿-name *someWildcardExpression -type f。您可能可以通过匹配每行中-name最后一个非尾随字符串后的字符串来模仿。您无法完全模仿,但似乎可以模仿(似乎目录以尾随斜杠打印),问问自己是否足够。/-type f! -type d
  2. 如果您可以ssh访问服务器,请使用它来运行服务器的find(1)
  3. 用于sshfs使远程目录显示为本地目录,然后调用当地的 find(1)

相关内容