【问题标题】:how to build a folder path in Unix shell scripting for any directory structure如何在 Unix shell 脚本中为任何目录结构构建文件夹路径
【发布时间】:2013-02-10 06:21:02
【问题描述】:

我的应用程序的文件夹结构类似于

/PNRPHD1/ex1/11.txt

/PNRPHD1/ex1/ex2/11.txt

/PNRPHD1/ex1/ex2/ex3/23.txt

/PNRPHD1/ex1/ex2/34.txt

/PNRPHD1/ex1/ex3/sp4/sp3/4334.txt,

但 /PNRPHD1 是主文件夹,在该文件夹中,我需要每次迭代并转到最后一级并检查该文件是否存在,在该目录中与否, 如果 File 是目录的内容,那么我需要构建该路径并退出该循环。我应该将上述路径作为变量的输出。

注意:在上面的目录结构中,每个目录可以包含另一个子目录或文件,它不会同时包含两个

任何人都可以建议我在 IF 循环中尝试这样做,但是代码太多了,我想用最少的代码来实现

DIR_REG = /PNRPHD1;
    ls -p $DIR_REG | while read -r dir
    do
        echo "directory under is  -- " ${dir} >>${DEBUG_LOG_FILE}
        BUP="/cygdrive/d/psoft/${PSFT_SID}/${dir}";

        ls -p $BUP | while read -r dir1
        do 
            if [ -f "${BUP}/${dir1}" ]; then 
                mkdir -p "${BUP}backup"
                echo "level of directory  -- " ${BUP}/${dir1} >>${DEBUG_LOG_FILE}
            else
                echo "level of directory  -- " ${BUP}/${dir1} >>${DEBUG_LOG_FILE}
            fi

        done

    done

我正在寻找一个更好的、简洁的 shell 脚本,它可以完成所需的任务..

更新:
我期望循环的输出在每次迭代中都应该有一个变量输出。 第一种情况:/ex1/ 第二种情况:/ex1/ex2 第三种情况:ex1/ex2/ex3/ 第四种情况:/ex1/ex2/ex3/ 第 5 种情况:/ex1/ex3/sp4/sp3/

【问题讨论】:

    标签: linux shell unix scripting


    【解决方案1】:

    为什么不创建一次您需要的目录树。然后使用tar 创建一个 tar 文件。任何需要相同目录结构的机器只需解压tar 文件即可。

    可以从here找到tar的手册页

    【讨论】:

    • tar 在这种情况下对我没有帮助,因为我没有创建相同的目录结构,我想从上一层复制文件并将其粘贴到定义的目录中..
    • @gmhk - 问题不清楚。也许发现, cp 会工作。请给出更好的解释您要做什么。
    • 我正在尝试从 /PNRPHD1/ 循环遍历文件夹结构,并希望获取文件夹路径直到目录结构的末尾,比如变量 A 应该有 ex1,变量 A 应该有值 ex1 /ex2/, var A 在迭代后应该有 /ex1/ex2/ex3/ 等...
    • @gmhk - 你的评论没有任何意义。请更新您的 OP 以提供树结构示例和您想要的内容。
    【解决方案2】:

    我尝试使用 find 命令 找 。 -type f -打印; 列出所有类型的文件

    和

    找到 . -type d -打印; 列出所有类型的目录

    一旦我们得到文件或目录的列表,使用 DirName 命令获取路径

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 2010-11-15
      • 1970-01-01
      • 2019-08-28
      相关资源
      最近更新 更多