For循环未在目录中找到所有文件

时间:2019-04-12 18:48:31

标签: bash loops

我有几个文件夹,我运行着一个脚本来重命名一些文件。直到每个文件夹大约300个文件为止,它没有任何问题,但是,现在好像for循环只是看不到所有文件。

我有一个名为Folder_List.txt的文件,该文件具有指向我要解析的所有文件夹的链接,另一个文件将已重命名的文件存档,因此不会重复。

每个视频文件都有2个关联文件,因此将其重命名为3个文件,然后继续进行下一个,但是现在,一旦到达名为S01E099的文件,它将停止重命名,我不知道为什么

#!/bin/bash
#Setup the folder parser
folder="/mnt/user/Storage/Google Drive/Server Files/Downloader/Folder_List.txt"
while IFS=$'\r' read path; do

#Check to ensure the location exists
if [[ -d "$path" ]]
then
cd "$path"

#Declare Variable
c=0
filename_old=0
archive="/mnt/user/Storage/Google Drive/Server Files/Downloader/Episodes_archive.txt"

#Loop
for i in *; do 

    #Gets the extension
    ext=$(echo $i | awk -F '.' '{print $NF}')

    #Gets Season
    season=$(echo "$i" | awk -F 'E' '{print $1}')

    #Gets title
    title=$(echo $i | awk -F ' - ' '{print $2}')
    title=$(echo $title | awk -F '.' '{print $1}')

    #Checks for episode matches
    if [ ! "$title" == "$filename_old" ]
    then
        filename_old=$title
        ((c++))
    fi

    #Gets the Episode number (needs to be after the episode match check)
    epnum=$(printf %02d $c)

    #Creates final filename
    filename_final=$season"E"$epnum" - "$title.$ext

    #Creates the naming structure for archiving
    filename_archive=$path$season"E"$epnum.$ext

    #Check if file was already renamed
    if grep -Fq "$filename_archive" < "$archive"
    then 
        #If file was already renamed do:
        continue
    else
        #Add renamed file to archive
        echo "$filename_archive"$'\r' >> "$archive"
        echo "$filename_final renamed"
        #Rename File
        mv "$i" "$filename_final"
    fi

done
fi

done < "$folder"

如果它有助于澄清任何内容,则要重命名的文件的格式为:S01E789-情节title.mkv

它应该只重命名文件夹中的所有文件,但是由于某种原因它正在中途停止。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我以前必须删除一些文件或某些东西,因为存档中已经有多达115个文件,因此它跳过找到的所有其他文件,因为它认为它们已被重命名。

非常感谢@choroba的帮助。