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

时间:2017-05-22 11:10:30

标签: php shell unix exec filelist

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

我尝试过的是:

ls -l /var/www/temp

但是我找不到ls命令的选项,它会列出绝对路径。

我在StackOverflow中找到了一个相关的问题:how to list full paths of folders inside a directory in linux?

但我需要的是单个命令本身我需要列出给定路径中的所有文件夹(此路径因其路径而异)及其绝对路径。

任何人都可以帮我这样做吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

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

您可以使用find替换pwd。

   find /var/www/temp -type d

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

答案 1 :(得分:0)

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和任何子目录的绝对路径。

答案 2 :(得分:0)

for D in `find . -maxdepth 1 -type d`; do echo $PWD${D#.}; done

工作原理:

  1. 首先,bash将在反引号中运行find命令,并用反引号替换反引号中的部分,返回值是工作目录的所有直接子目录的名称。
  2. 接下来,for循环将遍历所有子目录,并且对于存储在变量D中的每个子目录,它将打印到工作目录($ PWD)的路径,后跟子目录D,从中删除prexif& #34;&#34 ;.这样,绝对路径按预期打印。
  3. 注意:由于每个目录都有自己的硬链接("。"子目录),它还会打印工作目录的路径。

答案 3 :(得分:0)

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

#!/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