到目前为止,我可以使用以下方式从我的Ubuntu上的单个文件夹中读取文件:
for i in /path/to/files/Folder1/*.pcd
do
if [ ! -z $last_i ]
then
./vapp $last_i $i
fi
last_i="$i"
done
这将读取Folder1中的所有文件。我还有文件夹2和3(即Folder2,Folder3)。每个文件夹里面有几个100个文件,这些文件只是编号,例如0000.pcd,0001.pcd ... 0129.pcd ......等等。
我尝试过使用
/path/to/files/Folder{1..3}/*.pcd
问题是它现在需要来自一个文件夹的所有文件并处理其中的两个文件,而不是以相同的方式遍历该文件夹中的所有文件,然后再转到下一个文件夹。
我真正想要的是从我的三个文件夹中取出第i个文件夹,例如000i.pcd并将它(包括路径)传递给我的应用程序进行一些计算。
有效地我想这样做:
./vapp /Folder1/000i.pcd /Folder2/000i.pcd /Folder3/000i.pcd
答案 0 :(得分:0)
仅使用原生files:
"/etc/httpd/conf.d/allow_override.conf":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
<Directory /var/www/html/www/ />
AllowOverride AuthConfig
</Directory>
"/etc/httpd/conf.d/auth.conf":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
<Directory /var/www/html/www/ />
AuthType Basic
AuthName "Myproject Prototype"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Directory>
"/etc/httpd/.htpasswd":
mode: "000644"
owner: ec2-user
group: ec2-user
encoding: plain
content: |
admin:lala
功能及其扩展的bash
功能。从glob
/path/to/files/
此wonderful answer重复使用#!/bin/bash
shopt -s globstar nullglob dotglob
i=0
end=129
while [ "$i" -le "$end" ]
do
# Generating the file-name to be generated, the numbers 0-129
# with 4 character padding, taken care by printf
file="$(printf "%04d.pcd" $i)"
# The ** pattern enabled by globstar matches 0 or more directories,
# allowing the pattern to match to an arbitrary depth in the current
# directory.
fileList=( **/"$file" )
# Remember to un-comment the below line and see if the required files
# are seen by doing
# printf "%s\n" "${fileList[@]}"
# and run the executable below
./vapp "$(printf "%s " "${fileList[@]}")"
done
功能。
答案 1 :(得分:0)
我昨天以与Inian建议类似的方式解决了我的问题。除了我的方式是手动方式! 它适用于我,但我同意Inian的方式更灵活。无论如何,这是我的解决方案:
j=0
leadingZeros1="00000000"
leadingZeros2="0000000"
leadingZeros3="000000"
fol0="lidar03_00/"
fol1="lidar03_01/"
fol2="lidar03_02/"
ext=".pcd"
basepath="/my/path/"
for i in /my/path/lidar03_00/*.pcd
do
if [ ! -z $last_i ]
((j+=1))
then
if [ $j -le 9 ]
then
mypath1=$basepath$fol0$leadingZeros1$j$ext
mypath2=$basepath$fol1$leadingZeros1$j$ext
mypath3=$basepath$fol2$leadingZeros1$j$ext
fi
sleep .009
if [ $j -ge 10 ]
then
if [ $j -le 99 ]
then
mypath1=$basepath$fol0$leadingZeros2$j$ext
mypath2=$basepath$fol1$leadingZeros2$j$ext
mypath3=$basepath$fol2$leadingZeros2$j$ext
fi
if [ $j -ge 100 ]
then
if [ $j -le 999 ]; then
mypath1=$basepath$fol0$leadingZeros3$j$ext
mypath2=$basepath$fol1$leadingZeros3$j$ext
mypath3=$basepath$fol2$leadingZeros3$j$ext
fi;
fi
fi
#echo $mypath1
#echo $mypath2
#echo $mypath3
./vapp -i $mypath1 $mypath2 $mypath3 .txt"
fi
last_i="$i"
done
我承认,这不是最好的解决方案,但它现在解决了我的问题。如果我需要再次这样做,我可能会以Inian的方式做到这一点。 谢谢大家的帮助。 我试图避免嵌套ifs使用逻辑AND(&amp;&amp;)但不知何故它没有工作,我不想花更多的时间在这上面。这样笨拙的方式......