2011-10-10 59 views
1

我想列出当前目录中的所有目录ls -d *并列出其所有完整路径。我知道我需要将输出传递给某个东西,但只是不确定是什么。我不知道我是否可以将输出输出到pwd之类的东西。管道ls输出以获取所有目录的路径

想要的结果如下。

$ 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 

回答

3

尝试简单:

$ ls -d $PWD/*/ 

或者

$ ls -d /your/path/*/ 
+0

这完美的作品!我有一个后续问题。现在我可以将'ls -d $ PWD/* /'放入我的bash脚本中,我怎么能够遍历每个脚本来运行提到的命令,它执行更改目录,设置'JAVA_HOME'参数,然后运行'clean install'? –

+0

如果你的目录中没有空格,一个简单的for循环应该做。 – Mat

+0

你也可以循环使用其中有空格的目录,只是不要使用无用的Ls; http://partmaps.org/era/unix/award.html#ls。相反,请在$ PWD/* /中输入“d”。做任何“$ d”; done'。双引号很重要!总是引用你的变量插值。 – tripleee

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

会生成脚本妳。

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/ 

然后,当然,您可以使用上述脚本(只要您包含-- a您可以拨打ls)。

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

注意:上述命令在bash或sh中工作,而不在csh中。 (Bash是Linux和MacOSX的默认外壳。)

+0

如果您切换'-maxdepth 1'和'-type d',则会摆脱警告。名称选项和sed命令的用途是什么? –

+0

名称选项的参数是一个表示“忽略隐藏文件”的正则表达式。现在我不再需要删除sed部分(pwd前缀避免从查找输出中删除“./”)。 – mda

+0

您不需要屏蔽组中的点。作为小丑的小点在小组中没有意义。因此,在一个小组中,它不能像小丑一样工作。然而 - 名称参数使用globbing,而不是正则表达式,所以它不像百搭小玩家那样工作。 ?是globbing的小丑。 –

0

无管道neccessary:

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

出乎我的意料,在打印语句命令的工作太:

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