2017-10-06 22 views
0

我是一个尝试编写脚本的新手,该脚本利用包含不同文件夹(subj1,subj2,subj3 ...等)名称的文本文件,遍历每个文件夹并进入这些文件夹以提取完整路径 (即/Users/desktop/subj1/animals/pig.jpg,/Users/desktop/subj1/animals/cow.jpg),然后将主题ID和两个文件保存在3列中,分隔文本文件。 (例如,subj1 /Users/desktop/subj1/animals/pig.jpg /Users/desktop/subj1/animals/cow.jpg)等等。如何编写通过不同文件夹循环的脚本并将PATH输出保存到制表符分隔的文本文件中?

输出将如下所示:

subj1 /Users/desktop/subj1/animals/pig.jpg /Users/desktop/subj1/animals/cow.jpg
subj2 /用户/桌面/ subj2 /动物/ pig.jpg /用户/桌面/subj2/animals/cow.jpg

我试过寻找答案,但没有真正接近回答这个查询..我也需要这样做超过1000个文件夹所以尝试手动创建文件是疯狂的。

(编辑):我将不得不首先验证文件是否存在于每个文件夹内。我使用文件夹名称的文本文件创建了一个数组。这是我到目前为止:

read -r -a array <<< ${subj_numbs} 
    array_error_file=() 

    for subj in "${array[@]}" 
    do 
    echo "Working on.." \"${subj}\" 

    pig_file=${dir}/${subj}/animals/pig.jpg 
    cow_file=${dir}/${subj}/animals/cow.jpg 

    if [ ! -f $pig_file ] && [ ! -f $cow_file ]; then 
    echo " [!] Files ${pig_file} and ${cow_file} do not exist." 
    array_error_file+=($pig_file) 
    array_error_file+=($cow_file) 

    else 
    echo "Writing path names to text file.. -> \"${subj}\" 
    pig_path="$pig_file"; pwd 
    cow_path="$cow_file"; pwd 
+0

请使用命令“tree -a”显示文件夹结构。如果您没有它,请安装树形包 –

+0

您是否知道文件存在于每个文件夹中,还是您想检查它们是否存在,然后编写完整路径?如果他们存在,任务只是组合字符串,不需要进入文件夹。如果你需要检查他们 - 我会使用'find'并根据你的喜好来格式化输出。 –

+0

@dr_agon我已对我的帖子进行了更改,以便指定 –

回答

0

是这样的?

while read line; do 
    pig="$(cd "$(dirname "$line/animals/pig.jpg")"; pwd)/$(basename "$line/animals/pig.jpg")" 
    cow="$(cd "$(dirname "$line/animals/cow.jpg")"; pwd)/$(basename "$line/animals/cow.jpg")" 
    echo "$line \t $pig \t $cow" >> yourtabfile.txt 
done < yourlist.txt 

我会很高兴编辑这使它适合你的情况,如果它不工作,但这意味着你将不得不提供更多的信息。

+0

Hi @Will,感谢您的建议。到目前为止我所做的是使用带有文件夹名称的文本文件创建一个数组文件,执行一个'for'循环来遍历每个文件夹。在这个循环中,我会首先证明文件是否存在。然后如果他们这样做,我的计划是获取这些文件的路径,然后将它们与相应文件夹的ID一起写入单独的列。我将编辑我的原始问题以使其更清楚。 我该如何最好地实现这一点? –

相关问题