繁体   English   中英

在Bash中使用空格循环遍历目录

[英]Loop over directories with whitespace in Bash

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

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

但这会跳过名称中带有空格的目录。 任何帮助表示赞赏。

试试看:

for dir in */

选择解决方案:

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

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

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不要同时向程序传递更多的参数。 如果您不想查找递归扫描,则可以指定depth选项来禁用递归(虽然根本不了解语法)。

虽然这是否可以在您的特定脚本中使用是另一个问题;-)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM