我有一个包含两个目录路径的文件(将包含更多)。我想在每一行中读取,然后在每一行上ls
。很简单吧?
事情是不起作用,我不知道为什么。无论我做什么,最后一行总是很好ls
。之前的行是“非”存在于ls
,即使它们存在。
的File.List
/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盒子里试过它并且运行得很好
答案 0 :(得分: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/
答案 1 :(得分:1)
cat
是一个邪恶的程序,最好不要使用它。您必须逐行读取文件,cat
输出不是行缓冲。
while read path ; do
ls $path
done <file.list
答案 2 :(得分:0)
JGeZau,
该脚本看起来很好,您是否检查过您在绝对/相对方面正确引用路径?
我已经用bash复制了你的脚本,我完全没有问题:
test.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
希望这可能会有所帮助。