如何将结果find $1放入数组?
在for循环中:
for /f "delims=/" %%G in ('find $1') do %%G | cut -d\/ -f6-
Run Code Online (Sandbox Code Playgroud)
Sor*_*gal 59
我想哭.
在bash中:
file_list=()
while IFS= read -d $'\0' -r file ; do
file_list=("${file_list[@]}" "$file")
done < <(find "$1" -print0)
echo "${file_list[@]}"
Run Code Online (Sandbox Code Playgroud)
file_list 现在是一个包含结果的数组 find "$1
"第6场"有什么特别之处?目前尚不清楚你试图用你的cut命令做什么.
你想在第6个目录后剪切每个文件吗?
for file in "${file_list[@]}" ; do
echo "$file" | cut -d/ -f6-
done
Run Code Online (Sandbox Code Playgroud)
但为什么"场6"?我可以假设您实际上只想返回路径的最后一个元素吗?
for file in "${file_list[@]}" ; do
echo "${file##*/}"
done
Run Code Online (Sandbox Code Playgroud)
甚至
echo "${file_list[@]##*/}"
Run Code Online (Sandbox Code Playgroud)
这将为您提供数组中每个路径的最后一个路径元素.你甚至可以对结果做点什么
for file in "${file_list[@]##*/}" ; do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
(一个应该使用内置readarray代替)
find "$1" -print0
Run Code Online (Sandbox Code Playgroud)
查找内容并'在标准输出上打印完整的文件名,后跟空字符'.这很重要,因为我们稍后会将该输出拆分为空字符.
<(find "$1" -print0)
Run Code Online (Sandbox Code Playgroud)
"进程替换":find通过FIFO读取子进程的输出(即子进程的输出在find这里表现得像一个文件)
while ...
done < <(find "$1" -print0)
Run Code Online (Sandbox Code Playgroud)
find子进程的输出由while命令via 读取<
IFS= read -d $'\0' -r file
Run Code Online (Sandbox Code Playgroud)
这是条件:
read
Run Code Online (Sandbox Code Playgroud)
读取一行输入(来自find命令).read除非遇到EOF,否则返回值为0,此时退出.
-d $'\0'
Run Code Online (Sandbox Code Playgroud)
...将空字符作为分隔符(请参阅bash手册页中的QUOTING).之所以这样做是因为我们之前使用过null字符-print0.
-r
Run Code Online (Sandbox Code Playgroud)
反斜杠不被视为转义字符,因为它可能是文件名的一部分
file
Run Code Online (Sandbox Code Playgroud)
结果(实际上第一个单词,这里是唯一的)被置于变量中 file
IFS=
Run Code Online (Sandbox Code Playgroud)
该命令运行时IFS,特殊变量包含read将输入拆分为未设置的字符的字符.因为我们不想拆分.
在循环内:
file_list=("${file_list[@]}" "$file")
Run Code Online (Sandbox Code Playgroud)
在循环内部,file_list数组刚刚生长$file,适当引用.
Cou*_*gar 12
arrayname=( $(find $1) )
Run Code Online (Sandbox Code Playgroud)
我不明白你的循环问题?如果您看看如何使用该数组,那么在bash中,您可以循环遍历所有数组元素,如下所示:
for element in $(seq 0 $((${#arrayname[@]} - 1)))
do
echo "${arrayname[$element]}"
done
Run Code Online (Sandbox Code Playgroud)
gus*_*tkg -5
要循环查找,您可以简单地使用 find:
for file in "`find "$1"`"; do
echo "$file" | cut -d/ -f6-
done
Run Code Online (Sandbox Code Playgroud)
这是我从你的问题中得到的信息。