我有几个文件夹,我运行着一个脚本来重命名一些文件。直到每个文件夹大约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
它应该只重命名文件夹中的所有文件,但是由于某种原因它正在中途停止。任何帮助将不胜感激。
答案 0 :(得分:0)
我以前必须删除一些文件或某些东西,因为存档中已经有多达115个文件,因此它跳过找到的所有其他文件,因为它认为它们已被重命名。
非常感谢@choroba的帮助。