运行 使用 xargs 的远程服务器上的 basename 没有产生预期的结果
Running basename on remote server with xargs does not produce expected results
假设我在名为 ~/local/directory
的本地目录中有一个文件 myFile.txt
,那么以下命令会产生预期的结果(完整的文件路径后跟仅文件名):
find ~/local/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'
但是,现在假设我在名为 remote-host
的远程系统上的目录 ~/test/directory
中有一个文件 myFile2.txt
。尝试 运行 上面的相同命令远程打印出完整的文件路径两次,就好像 basename
不起作用一样。我做错了什么?
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'"
(我的最终目标是 运行 在远程环境中对 find
返回的文件进行 rsync,并将它们保存回本地到特定目录,但在文件名中添加前缀,因此需要对于 basename。使用 xargs 而不是 rsync 的 -exec
选项似乎更可行。)
您需要对 $
进行转义,以便将其按字面意思发送到远程机器。否则,$(basename {})
在本地执行,输出 {}
代入 ssh
参数。
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'"
假设我在名为 ~/local/directory
的本地目录中有一个文件 myFile.txt
,那么以下命令会产生预期的结果(完整的文件路径后跟仅文件名):
find ~/local/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'
但是,现在假设我在名为 remote-host
的远程系统上的目录 ~/test/directory
中有一个文件 myFile2.txt
。尝试 运行 上面的相同命令远程打印出完整的文件路径两次,就好像 basename
不起作用一样。我做错了什么?
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'"
(我的最终目标是 运行 在远程环境中对 find
返回的文件进行 rsync,并将它们保存回本地到特定目录,但在文件名中添加前缀,因此需要对于 basename。使用 xargs 而不是 rsync 的 -exec
选项似乎更可行。)
您需要对 $
进行转义,以便将其按字面意思发送到远程机器。否则,$(basename {})
在本地执行,输出 {}
代入 ssh
参数。
ssh -q remote-host "find ~/test/directory -type f -iname '*myFile*' | xargs -I{} sh -c '{ echo {}; echo $(basename {}); }'"