管道ls输出以获取所有目录的路径

时间:2011-10-10 21:23:36

标签: bash pipe

我想列出当前目录中的所有目录ls -d *并列出其所有完整路径。我知道我需要将输出管道输出,但不知道是什么。我不知道是否可以将输出传输到pwd或其他东西。

期望的结果如下。

$ cd /home/
$ ls -d *|<unknown>
/home/Directory 1
/home/Directory 2
/home/Directory 3

<unknown>是需要传递给pwd或其他东西的部分。

我的总体目标是创建一个脚本,允许我为每个提供给它的完整路径构造一个命令。我将键入build,并在内部为每个命令运行以下命令。

cd <full directory path>; JAVA_HOME=jdk/Contents/Home "/maven/bin/mvn" clean install

5 个答案:

答案 0 :(得分:3)

尝试简单:

$ ls -d $PWD/*/

或者

$ ls -d /your/path/*/

答案 1 :(得分:1)

find `pwd` -type d -maxdepth 1 -name [^.]\*

注意:上面的命令适用于bash或sh,而不适用于csh。 (Bash是linux和MacOSX中的默认shell。)

答案 2 :(得分:0)

ls -d $PWD/* | xargs -I{} echo 'cd {} JAVA_HOME=jdk/Contents/Home "/maven/bin/mvn" clean install' >> /foo/bar/buildscript.sh

将为你生成脚本。

答案 3 :(得分:0)

我可能还建议您在--构造中使用ls,以便ls -d $PWD/*/变为ls -d -- $PWD/*/(插入额外的--)?这将有助于那些目录或文件名以-字符开头的实例:

/home/-dir_with_leading_hyphen/
/home/normal_dir/

在这种情况下,ls -d */会导致:

ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

但是,ls -d -- */会导致:

-dir_with_leading_hyphen/      normal_dir/

然后,当然,您可以使用上面指出的脚本(只要您在调用--时随时添加ls)。

答案 4 :(得分:0)

没有必要的管道:

find $(pwd) -maxdepth 1 -type d -printf "%H/%f\n"
令我惊讶的是,print语句中的命令也有效:

find -maxdepth 1 -type d -printf "$(pwd)/%f\n"