【发布时间】:2012-03-03 18:30:46
【问题描述】:
我有一个函数,它的第一个参数是存储到某个目录的路径的字符串。 该字符串是 find 的输出。 -type d.
如果我列出当前目录中的所有文件,它很简单
for file in *; do
commands
done
但是对于字符串,它当然不会那样对待它。
for file in "$1"; do
commands
done
所以我想用 ls
for file in `ls "$1"`; do
commands
done`
但是有了这个解决方案,它根本无法处理有空间的文件,经过一段时间 研究我到处都发现了使用 find 的建议,但我不明白,find 会 列出所有文件/目录/子目录,只是整个树,但我只想要当前目录中的东西。 我将非常感谢您的每一次帮助。
更新
我又尝试了一件似乎有效的方法:
pushd "$1"
for file in *; do
echo "$file"
done
popd
但我更喜欢一些不需要更改工作目录的解决方案
【问题讨论】:
-
现在你知道为什么传统上 Unix 不鼓励在文件名中使用空格(尽管它一直允许它们)。当路径名中没有空格(换行符、退格符、制表符和其他控制字符)时,这些工具可以发挥最佳效果。
-
使用:
( cd "$1" || exit 1; ...),因为如果出现问题,这不会让您的主进程滞留在远程目录中。