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