我想对特定目录中某种类型的每个文件进行处理。我用bash脚本写过
HANDIN_FILES=`find . -type f -printf "%f\n" | head -20 `
for i in $HANDIN_FILES
do
echo $i
done
作为第一个版本。如果任何文件名中没有空格,这将非常有用。如果有一个文件silly name.txt
,则i
最终是第一个silly
,然后是name.txt
,这根本不是我想要的。
我知道我可以将所有do ... done
内容放在命令中的-exec
选项中find
,但是我想将文件列表保留在shell变量中,以备后用。有人可以提出一种快速修复方法,该方法将使循环中的一次迭代i
具有该值silly name.txt
吗?
使用bash
4.4+:
readarray -td '' files < <(find . -type f -print0 | head -zn 20)
for i in "${files[@]}"; do
something with "$i"
done
对于较早的bash版本:
files=()
while IFS= read -rd '' file; do
files+=("$file")
done < <(find . -print0 | head -zn 20)
for i...
在这里,使用起来更简单zsh
:
files=(**/*(D.[1,20]))
for i ($files) something with $i
(至少文件列表将被排序,因此前20个更有意义)
请参阅为什么遍历find的输出是错误的做法?其他处理(或不处理)find
输出的方式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句