0

我有一个包含两个目录路径的文件(将包含更多)。我想在每一行中阅读,然后ls在每一行中阅读。很简单吧?

问题是它不起作用,我不知道为什么。无论我做什么,最后一行总是与ls. 之前的行对 是“不”存在的ls,即使它们存在。

文件列表

/path/to/directory1/
/path/to/directory2/
/path/to/directory1/
/path/to/directory2/

当我运行以下代码段时

DIRECTORIES="file.list"
for DIR2 in `cat $DIRECTORIES`
do
       echo $DIR2
       ls $DIR2
done

我得到以下输出

/path/to/directory1/
 does not exist. file /path/to/directory1/
/path/to/directory2/
 does not exist. file /path/to/directory2/
/path/to/directory1/
 does not exist. file /path/to/directory1/
/path/to/directory2/
Server

它有什么问题?还有其他更好的解决方案吗?

谢谢

编辑:奇怪,我刚刚在另一个 Unix 机器上试了一下,效果很好

4

3 回答 3

2

可能是 $DIR2 包含行尾吗?尝试删除它们:

DIR2=`echo $DIR2 | tr -d '\r'`

我是这么认为的,因为发布的日志对我来说看起来很奇怪。ls我的电脑上的命令输出如下所示:

ls: cannot access /path/to/directory1/: No such file or directory

但是你的:

 does not exist. file /path/to/directory1/
于 2012-05-15T21:24:28.927 回答
1

cat是一个邪恶的程序,最好不要使用它。您必须逐行读取文件,cat输出不是行缓冲的。

while read path ; do
    ls $path
done <file.list
于 2012-05-15T21:57:17.537 回答
0

JGeZau,

该脚本看起来不错,您是否检查过您在绝对/相对方面正确引用了您的路径?

我已经在 bash 中复制了您的脚本,并且完全没有问题:

测试.sh:

#!/bin/bash
DIRECTORIES="paths"
for DIR2 in `cat $DIRECTORIES`
do
   echo $DIR2
   ls $DIR2
done

路径:

/var/logs/
/var/tmp/

输出:

./test.sh

/var/logs/
file1.log file2.log 

/var/tmp/
tmp1 tmp2 tmp3

希望这可能会有所帮助。

于 2012-05-15T21:14:35.777 回答