Php 列出给定路径的文件夹的绝对路径-shell

Php 列出给定路径的文件夹的绝对路径-shell,php,shell,unix,exec,filelist,Php,Shell,Unix,Exec,Filelist,我想使用shell脚本列出给定路径中所有文件夹的绝对路径 我试过的是: ls -l /var/www/temp 但是我找不到将列出绝对路径的ls命令选项 我在StackOverflow中发现了一个相关问题: 但我需要的是,在一个命令中,我需要列出给定路径中的所有文件夹(此路径不同)及其绝对路径 有人能帮我做这件事吗?提前感谢。这会有所帮助,但它没有使用“ls” 您可以使用find替换pwd find /var/www/temp -type d 但是请注意,这将在屏幕上输出列表。shel

我想使用shell脚本列出给定路径中所有文件夹的绝对路径

我试过的是:

ls -l /var/www/temp
但是我找不到将列出绝对路径的
ls
命令选项

我在StackOverflow中发现了一个相关问题:

但我需要的是,在一个命令中,我需要列出给定路径中的所有文件夹(此路径不同)及其绝对路径


有人能帮我做这件事吗?提前感谢。

这会有所帮助,但它没有使用“ls”

您可以使用find替换pwd

   find /var/www/temp -type d

但是请注意,这将在屏幕上输出列表。

shell函数如何

dabspath () {
if [ -d "$1" ]
then
    cd "$1"
    find "$PWD" -type d
    cd "$OLDPWD"
else
    echo "$0: $1: No such directory"
fi
}
用法:
dabspath-foo


如果foo是一个相对于当前工作目录的目录,那么它将打印foo和任何子目录的绝对路径。

用于“查找”中的D-最大深度1-类型d`;do echo$PWD${D#.};完成

工作原理:

  • 首先,bash将在backticks中运行find命令,并将backticks中的部分替换为find返回的内容,即工作目录的所有直接子目录的名称
  • 接下来,for循环将遍历所有子目录,对于存储在变量D中的每个子目录,它将打印到工作目录($PWD)的路径,后跟子目录D,从中删除prexif“.”。这样,绝对路径将按预期打印

  • 注意:由于每个目录都有一个指向自身的硬链接(“子目录”),因此它还将打印到工作目录的路径。

    此脚本列出所有目录,或者可以选择列出
    -type T
    选项所识别的所有类型。默认情况下,如果未提供任何参数,它将列出当前目录中的所有目录。要列出绝对路径,请将绝对路径作为目标目录传递

    #!/bin/bash
    
    # usage: ${0} [-type [fd]] [-l] <directory>
    
    _TYPE="d" # if f, list only files, if d, list only directories
    let _long=0
    let _typeflag=0
    
    # collect dirs and files
    DIRS=( ) ; FILS=( )
    for A in "$@" ; do
      if [ $_typeflag -eq 1 ]; then
        _TYPE=$A
        let _typeflag=0
      elif [ -d "$A" ]; then
        DIRS=( ${DIRS[@]} "$A" )
      elif [ -f "$A" ]; then
        FILS=( ${FILS[@]} "$A" )
      else
        case "$A" in
        "-type") let _typeflag=1 ;;
        "-l") let _long=1 ;;
        *) echo "not a directory: [$A]" 1>&2
          exit 1
          ;;
        esac
      fi
    done
    
    # list files in current dir, if nothing specified
    [ ${#DIRS[@]} -eq 0 ] && DIRS=( "$(pwd -P)" )
    
    if [ $_long -eq 0 ]; then
      find ${DIRS[@]} -maxdepth 1 -type $_TYPE | while read F ; do
        if [[ "$F" != "." && "$F" != ".." ]]; then
          echo "\"$F\""
        fi
      done | xargs ls -ltrad --time-style=long-iso | sed 's#.*:[0-9][0-9] ##'
    else
      find ${DIRS[@]} -maxdepth 1 -type $_TYPE | while read F ; do
        echo "\"$F\""
      done | xargs ls -ltrad --time-style=long-iso
    fi
    
    #/bin/bash
    #用法:${0}[-type[fd][-l]
    _TYPE=“d”#如果是f,则仅列出文件;如果是d,则仅列出目录
    设_long=0
    设_typeflag=0
    #收集目录和文件
    DIRS=();FILS=()
    对于“$@”中的A;做
    如果[$_typeflag-等式1];然后
    _类型=$A
    设_typeflag=0
    elif[-d“$A”];然后
    DIRS=(${DIRS[@]}“$A”)
    elif[-f“$A”];然后
    FILS=(${FILS[@]}“$A”)
    其他的
    中的“$A”格
    “-type”)让_typeflag=1;;
    “-l”)让_long=1;;
    *)echo“不是目录:[$a]”1>&2
    出口1
    ;;
    以撒
    fi
    完成
    #如果未指定任何内容,则列出当前目录中的文件
    [${#DIRS[@]}-eq 0]&&DIRS=(“$(pwd-P)”)
    如果[$_long-等式0];然后
    读取F时查找${DIRS[@]}-maxdepth 1-type$|u type;做
    如果[[“$F”!=”&&“$F”!=”。”];然后
    回显“\”$F”
    fi
    完成| xargs ls-ltrad--时间样式=长iso | sed's#。*[0-9][0-9]#
    其他的
    读取F时查找${DIRS[@]}-maxdepth 1-type$|u type;做
    回显“\”$F”
    完成| xargs ls-ltrad--时间样式=长iso
    fi
    
    在标记为与您链接的问题重复的问题中,的可能重复项尚未完成所需操作?@Dymen1..在该问题解决方案中,我可以在哪里指定路径?@DecentDabbler..尝试了该答案。但它也列出了文件。我只需要文件夹。你确定吗?它对我很管用。您是否有一个
    ls
    别名,并在您的环境中定义了额外的选项?如果是这样,请执行
    哪个ls
    ,并使用该输出(
    /bin/ls
    ,例如)作为命令:
    /bin/ls-d/your/path/*