0

假设我的 中有一个目录dir$HOME让我们对其进行symlink处理。

ln -s "$HOME/dir" "$HOME/.toDir"

然后,我们引入一个包含它的变量symlink

TO_DIR="$HOME/.toDir"

TO_DIR我想在不解析输出的情况下枚举目录中的所有文件,ls这被认为是一种不好的做法(但它有效!),我尝试使用 for 循环但没有成功:

for file in "$TO_DIR"/*
do
  # do something with $file
done

我没有得到文件,似乎$TO_DIR没有扩展到目录。

更新:它从命令行(交互式)工作,但不是从 shell 脚本。

4

3 回答 3

1

我使用了以下脚本:

#!/bin/bash

TO_DIR="$HOME/.toDir"

for f in $TO_DIR/*; do
    echo $f
done

它工作正常:

$ ./test.bsh 
/home/stefanos/.toDir/a
/home/stefanos/.toDir/b

也许您试图在脚本TO_DIR 之外设置变量?

于 2013-05-29T10:34:09.977 回答
0

使用命令readlink

readlink symlink

将输出符号链接的目标。当心,不要像这样调用它readlink symlink/

于 2013-05-29T09:49:43.697 回答
-2

你最好改用这样的东西:

find -L "$TO_DIR" -maxdepth 1 -type f | while read filename; do
  dosomething "$filename"
done

这样,我们要求 find 查找“$TO_DIR”中的所有文件,-L 开关告诉它遵循符号链接。我们还通过使用 while 循环每行一次读取一个文件名来保护循环免受由于文件名中包含空格而导致的失败。对于 for 循环,它会将带有空格的文件名分解为在空格处拆分的单独块。

上面还会找到名称为“$TO_DIR/.hidden”的文件,因此您可能需要注意这一点。

于 2013-05-29T10:02:55.053 回答