我有以下代码,必须对所有文件和目录进行递归列表。 我不确定它是否正常工作。
#!/usr/bin/sh
recur_fun()
{
for i in `ls -ltr | awk '{print $9}'`
do
echo $i;
cd $i;
ls
pwd
recur_fun
cd ..
pwd
done
}
我需要复制文件的名称,然后以明文形式使用它。
答案 0 :(得分:5)
我建议将其替换为:
find . -print
答案 1 :(得分:2)
ls
已经有一个递归选项:
ls -R
答案 2 :(得分:2)
注意:我建议使用cleartool命令而不是特定于操作系统的shell命令。
例如:
cleartool ls -r -nxn
将list all files递归,私有或不私有。
有关详情,请参阅Command line to delete all ClearCase view-private files。
答案 3 :(得分:1)
如果目的是完成工作,那么使用预先构建的工具(例如“find
”或“ls -R
”来可靠地完成工作。
假设目的是了解递归和shell脚本,而不是完成工作,那么由于多种原因它无法正常工作:
cd
最多会产生错误消息。cd
是否有效,所以您很容易看到相同的文件一遍又一遍地重复出现(在给定目录中每个文件一次)。此外,这两个分号是多余的。
如果您确实需要在脚本中使用cd
,那么在子shell中执行此操作通常是个好主意:
if [ -d $i ]
then ( cd $; pwd; recur_fun )
fi
当子shell完成时,您知道父级仍处于以前完全相同的位置 - 它不依赖于cd
命令跨符号链接执行的变幻莫测。现代贝壳(意为bash
)似乎认为你通常应该想要一个'逻辑cd
'操作,这会让我感到害怕,因为我几乎从不想要这种行为。