在Bash中循环使用空格的目录

时间:2011-02-04 07:16:33

标签: bash

在bash脚本中,我想迭代当前工作目录中的所有目录并对它们进行操作。它们可能包含特殊符号,尤其是空格。我怎样才能做到这一点?我有:

for dir in $( ls -l ./)
do
    if [ -d ./"$dir" ]

但是这会在名字中用空格跳过我的目录。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:34)

尝试一下:

for dir in */

答案 1 :(得分:11)

选择解决方案:

http://www.cyberciti.biz/tips/handling-filenames-with-spaces-in-bash.html

一般的想法是更改默认分隔符(IFS)。

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in *
do
  echo "$f"
done
IFS=$SAVEIFS

答案 2 :(得分:2)

有多种方法。这是非常快的事情:

find /your/dir -type d -print0 | xargs -0 echo

这将以递归方式扫描/ your / dir目录,并将所有路径传递给命令“echo”(根据需要进行交换)。它可以多次调用echo,但它会尝试传递控制台允许的目录名。这非常快,因为需要启动的进程很少。但它仅适用于可以采用任意数量值作为选项的程序。 -print0告诉find使用零字节分隔文件路径(-0告诉xargs读取由零字节分隔的参数) 如果你没有后者,你可以这样做:

find /your/dir -type d -print0 | xargs -0 -n 1 echo

find /your/dir -type d -print0 --exec echo '{}' ';'

选项-n 1将告诉xargs不要将多个参数同时传递给您的程序。 如果您不希望find以递归方式扫描,则可以指定depth选项以禁用递归(尽管不知道语法)。

虽然在你的特定脚本中可用的是另一个问题; - )。