You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSH打包最新修改目录的Tar文件时遇路径错误求助

解决SSH打包最新修改目录的路径问题

嘿,我懂你现在的烦恼——本来以为通过SSH打包最新修改的目录是件顺手的事,结果路径问题接二连三报错,确实挺闹心的。咱们来拆解问题,一步步搞定它。

先说说你遇到报错的原因

  1. 第一个命令用了\ls -1dt ./*/ | head -n 1,这里的./是相对路径,如果你的SSH会话当前工作目录不是/dir1/dir2/,那系统自然找不到该目录下的最新子文件夹,所以抛出./Recent/: No such file or directory的错误。
  2. 改成/*/后,你是在扫描根目录下的所有目录,而你的目标目录在/dir1/dir2/下,head -n1拿到的大概率是根目录下最新修改的某个目录(比如你提到的dir3/),这个目录根本不在你的目标路径里,cd命令当然找不到它。

靠谱的解决方案

方案一:用find命令(推荐,适配特殊目录名)

find命令比ls更稳健,能处理带空格、特殊字符的目录名,而且可以直接基于绝对路径操作,不用依赖当前工作目录:

# 第一步:获取/dir1/dir2/下最新修改的子目录的绝对路径
latest_dir=$(find /dir1/dir2/ -maxdepth 1 -type d ! -path /dir1/dir2/ -printf "%T@ %p\n" | sort -nr | head -n1 | awk '{print $2}')

# 第二步:打包这个目录
tar -czf latest_directory.tar.gz "$latest_dir"

给你解释下每个参数的作用:

  • -maxdepth 1:只找/dir1/dir2/下的一级子目录,不递归查找
  • -type d:只筛选目录类型的文件
  • ! -path /dir1/dir2/:排除/dir1/dir2/目录本身,只取它的子目录
  • %T@:输出目录的修改时间戳(数字格式,方便排序),%p输出目录的绝对路径
  • sort -nr:按时间戳从大到小排序,保证最新的目录排在最前面
  • awk '{print $2}':提取输出结果中的路径部分,赋值给变量latest_dir

方案二:用ls命令(适合目录名无特殊字符的场景)

如果你确定目标目录的名字没有空格、&、*这类特殊字符,也可以用ls,但一定要用绝对路径指定目标范围:

# 获取/dir1/dir2/下最新的子目录
latest_dir=$(ls -1dt /dir1/dir2/*/ | head -n1)

# 打包
tar -czf latest_directory.tar.gz "$latest_dir"

额外提醒

在SSH执行命令时,尽量用绝对路径,不要依赖cd到某个目录再操作——毕竟你不确定SSH会话的默认工作目录是什么,用绝对路径能避免很多不必要的路径错误。

内容的提问来源于stack exchange,提问作者alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:31:24