我将两个位置args传递给脚本来运行,两个args都是路径,而在分析路径的场景中,问题有时出在某些路径上,例如:m i sc . . . . .. . .
它具有点和空格,并且有时甚至在目录名中也有一个反斜杠。
试图通过两个过程直接或通过at sign
获得参数。
SOURCE_ARG=$1
DESTINATION_ARG=$2
和
ARG_COUNT=0
for POSITIONAL_ARGUMENTS in "${@}"
do
((ARG_COUNT++))
ARGUMENT_ARRAY[$ARG_COUNT]=$POSITIONAL_ARGUMENTS
done
在循环中,我遍历转发给他们的命令的结果。
while IFS= read -r dir
do
echo "${ARGUMENT_ARRAY[1]}"
echo "${dir}"
while IFS= read -r item
do
# do some stuff
done < <(ls -A "$dir"/)
done < <(du -hP "$SOURCE_ARG" | awk '{$1=""; print $0}' | grep -v "^.$" | sed "s/^ //g")
当我使用echo "${ARGUMENT_ARRAY[1]}"
时,我得到的路径与我需要检查的路径相同,但是在这里使用循环迭代变量作为dir时-> echo "${dir}"
我使所有空格都转义了,因为该路径的其他命令无法执行职位。
我要问的是如何在循环内获取$dir
的输出,就像我上面提到的echo "${ARGUMENT_ARRAY[1]}"
(输入所有空格和反斜杠)一样
感谢@Barmar,如注释中所述,这是du
的问题,当我将命令更改为find
时,问题消失了。
> The only reason why $dir would have escape in it is because du is
> printing the filenames with escapes. But AFAIK it doesn't do that. –
> Barmar 17 hours ago
>
>
> Why are you using du if you're not interested in the usage column? If
> you just want a list of directories, use find "$SOURCE_ARG" -type d –
> Barmar 17 hours ago