假设我的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脚本运行。
答案 0 :(得分: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
?
答案 1 :(得分:0)
使用命令readlink
。
readlink symlink
将输出符号链接的目标。注意,不要像readlink symlink/
那样调用它。
答案 2 :(得分:-2)
你最好不要使用这样的东西:
find -L "$TO_DIR" -maxdepth 1 -type f | while read filename; do
dosomething "$filename"
done
这样我们就要求find找到“$ TO_DIR”中的所有文件,-L switch告诉它遵循符号链接。我们还保护循环 由于文件名的失败,通过阅读 使用while循环每行一个文件名。对于for循环 它会将带有空格的文件名分成单独的块 在空间分开。
以上也会找到名称为“$ TO_DIR / .hidden”的文件 可能想要注意这一点。