我有一堆相对较新的代码,即隐藏了很多错误,我有这样的代码:
if [ -d $DATA_ROOT/$name ]
,我已经完成研究并理解这意味着如果目录存在但现在我正在尝试打印出那些存在的目录来解决问题。
尝试使用
echo `First: $DATA_ROOT`
echo `Second: $name`
echo `Last: $DATA_ROOT/$name`
exit 1;
找不到所有的命令,代码是为了通过提取所有文件修复我正在尝试的错误,但最终没有提取所有以数据提取失败错误的错误,代码:
num_files=`find $DATA_ROOT/$name -name '*' | wc -l`
if [ ! $num_files -eq $extract_file ] ; then
echo "Data extraction failed! Extracted $num_files instead of $extract_file"
exit 1;
我只想正确提取所有文件,请该怎么做?
答案 0 :(得分:2)
您正在使用的back-ping意味着“将其作为命令执行”
echo `First: $DATA_ROOT`
echo `Second: $name`
echo `Last: $DATA_ROOT/$name`
会尝试执行一个名为“First:”的命令,该命令不存在。
而是使用双引号,因为它们允许变量替换,就像这样,并且不会尝试将其作为命令执行
echo "First: $DATA_ROOT"
echo "Second: $name"
echo "Last: $DATA_ROOT/$name"
另外
find $DATA_ROOT/$name -name '*'
可能不是您想要的,-name '*'
是默认值,因此您不需要它。正如其他人指出的那样,find会返回所有内容,包括目录和特殊文件(如果你有的话)。如果您只想列出文件,则需要find "$DATA_ROOT/$name" -type f
;如果只想列出目录,则find "$DATA_ROOT/$name" -type d
。也总是在"$DATA_ROOT/$name"
周围使用双引号,因为它允许您使用空格处理文件名 - 如果您有$name
包含空格,否则您将失败。
答案 1 :(得分:0)
您正在使用反引号,因此任何反引号下的内容都会被视为执行命令,因此您将获得命令未找到异常。您可以使用双引号来避免如下所示的错误:
echo "First: $DATA_ROOT"
echo "Second: $name"
echo "Last: $DATA_ROOT/$name"
您可以使用find命令列出所有目录,如:
find $DATA_ROOT/$name -type d
上面的命令将列出所有目录(-type d
选项并使用-type f
列出$DATA_ROOT/$name
内的所有文件)然后您可以对这些目录执行操作。
答案 2 :(得分:0)
find
不仅报告普通文件,还报告目录(包括.
)。
使用find "$DATA_ROOT/$name" -type f
。