如何根据 .MTS 视频文件的创建日期和修改日期将数组拆分为多个
How to split a array to several based on create date and modified date of .MTS video files
我想根据当前 fodler 的 MTS 视频文件的规律自动创建文件夹。
我可以得到一些正确的信息
声明-a CreateArray10digits=$(stat -f "%B" * | cut -c1-10)
声明-a ModifiedArray10digits=$(stat -f "%m" * | cut -c1-10)
垃圾文件有 0 秒或 1 秒的差异。
所以终于
clip-1文件夹:00000.MTS 00001.MTS 00002.MTS 00003.MTS 00004.MTS 00005.MTS 00006.MTS 00007.MTS 00008.MTS 00009.MTS 00010.MTS 00011.MTS
clip-2 文件夹:00012.MTS
clip-3文件夹:00013.MTS 00014.MTS
clip-4文件夹:00015.MTS
clip-5 饲养员:00016.MTS
如果当前文件夹中的每个MTS文件都没有Regularity,那么
只需将 clip-1 制作到 clip-16 并移动到每个文件夹..就是这样
什么是 bash shell 在 mac 上的最佳脚本?
================这里是我尝试的代码==============
# 首先,根据 MTS 文件的当前目录的创建日期时间(以秒为基准)获取文件列表作为数组
declare -a CreateArray10digits=$(stat -f "%B" * | cut -c1-10)
# 为 CreateArray10digits 创建新数组
indexOfcreateArray10digits=($CreateArray10digits)
# 秒,根据 .MTS 文件的当前目录的修改日期时间获取文件列表作为数组
declare -a ModifiedArray10digits=$(stat -f "%m" * | cut -c1-10)
# 为 ModifiedArray10digits 创建新数组
indexOfmodifiedArray10digits=($ModifiedArray10digits)
# 并获取 CreateArray10digits
的数组长度
indexOfcreateArray10digitsLenth=${#indexOfcreateArray10digits[*]}
indexOfmodifiedArray10digitsLenth=${#indexOfmodifiedArray10digits[*]}
#为当前目录的文件名列表创建新数组
declare -a ArrayFullFileNameWithExtension=$(stat -f "%N" *)
indexOfModifiedArrayFullFileNameWithExtension=($ArrayFullFileNameWithExtension)
declare -a ArrayFullFileNameWithoutExtension=$(stat -f "%N" * | cut -c1-5 )
indexOfModifiedArrayFullFileNameWithoutExtension=($ArrayFullFileNameWithoutExtension)
最后,我制作了几个数组,这些数组最终具有相同的长度
下面是我的代码
CNT=$((${#indexOfcreateArray10digits[*]}-1)) # 17-1 = 16
last_file_index=$CNT
current_dir=1
make_clip_dir $current_dir
move_clip 0 $current_dir # what mean 0 ? 00000.MTS ?
# when not junked then will be make new folder by for - loop
function make_clip_dir {
mkdir "clip-"
}
# is this move_clip function right ?
function move_clip {
mv ${indexOfModifiedArrayFullFileNameWithExtension[]} "./clip-"
}
# please check below code is right or not .. very i am confused :-)
function connected_junks {
if [[ $((${indexOfcreateArray10digits[]} - ${indexOfmodifiedArray10digits[]})) -eq 0 ]];
then
#echo "$variable1"
#echo "$variable2"
echo " true !!"
elif [[ $((${indexOfcreateArray10digits[]} - ${indexOfmodifiedArray10digits[]})) -eq 1 ]];
then
echo " true !!"
else
echo " false!!!!!!!!!!!!!!!!!!!!! "
fi
}
echo "difference:"$((${indexOfcreateArray10digits[14]} - ${indexOfmodifiedArray10digits[13]}))
connected_junks 14 13
echo "1:"${indexOfcreateArray10digits[14]}
echo "0:"${indexOfmodifiedArray10digits[13]}
=============== results
difference:1
false!!!!!!!!!!!!!!!!!!!!! # i have no idea why this is false
1:1524058477
0:1524058395
============================================================
# for loop statement
for i in seq 1 $last_file_index
do
if [[ ! connected_junks $((i-1)) $i ]];
then
current_dir=$((current_dir+1))
make_clip_dir $current_dir
fi
move_clip $i $current_dir
done
# but won't works
# only clip-1 folder was created and 00000.MTS moved into this folder
#
########################### 结果错误
/twoArrayCompare.sh: line 170: conditional binary operator expected
/twoArrayCompare.sh: line 170: syntax error near `$((i-1))'
/twoArrayCompare.sh: line 170: ` if [[ connected_junks $((i-1)) $i ]];
你几乎已经把它写在你的草图上了。算法的思想就是按照你的红色箭头。
首先,您创建第一个目录并将第一个剪辑文件放在那里。
然后你可以从第二个迭代到最后一个,如果有指向前一个项目的箭头,则将该文件放入与前一个相同的目录中。否则,如果没有箭头,则创建一个新目录。
这是为您准备的该计划的主要内容:
last_file_index=16
current_dir=1
make_clip_dir $current_dir
move_clip 0 $current_dir
for i in $(seq 1 $last_file_index)
do
if ! connected_junks $((i-1)) $i
then
current_dir=$((current_dir+1))
make_clip_dir $current_dir
fi
move_clip $i $current_dir
done
您需要为此添加 move_clip
、make_clip_dir
和 connected_junks
函数。
最简单的是make_clip_dir
:
function make_clip_dir {
mkdir "clip-"
}
对于 connected_junks
,您可以利用 create/modified 数组和一些 if
条件,然后 return 1 或 0。
对于 move_clip
您需要格式化索引以形成名称“000NN.MTS”和 mv
到新目标的源文件。
我想根据当前 fodler 的 MTS 视频文件的规律自动创建文件夹。
我可以得到一些正确的信息 声明-a CreateArray10digits=$(stat -f "%B" * | cut -c1-10) 声明-a ModifiedArray10digits=$(stat -f "%m" * | cut -c1-10)
垃圾文件有 0 秒或 1 秒的差异。
所以终于 clip-1文件夹:00000.MTS 00001.MTS 00002.MTS 00003.MTS 00004.MTS 00005.MTS 00006.MTS 00007.MTS 00008.MTS 00009.MTS 00010.MTS 00011.MTS
clip-2 文件夹:00012.MTS
clip-3文件夹:00013.MTS 00014.MTS
clip-4文件夹:00015.MTS
clip-5 饲养员:00016.MTS
如果当前文件夹中的每个MTS文件都没有Regularity,那么 只需将 clip-1 制作到 clip-16 并移动到每个文件夹..就是这样
什么是 bash shell 在 mac 上的最佳脚本?
================这里是我尝试的代码==============
# 首先,根据 MTS 文件的当前目录的创建日期时间(以秒为基准)获取文件列表作为数组
declare -a CreateArray10digits=$(stat -f "%B" * | cut -c1-10)
# 为 CreateArray10digits 创建新数组
indexOfcreateArray10digits=($CreateArray10digits)
# 秒,根据 .MTS 文件的当前目录的修改日期时间获取文件列表作为数组
declare -a ModifiedArray10digits=$(stat -f "%m" * | cut -c1-10)
# 为 ModifiedArray10digits 创建新数组
indexOfmodifiedArray10digits=($ModifiedArray10digits)
# 并获取 CreateArray10digits
的数组长度indexOfcreateArray10digitsLenth=${#indexOfcreateArray10digits[*]}
indexOfmodifiedArray10digitsLenth=${#indexOfmodifiedArray10digits[*]}
#为当前目录的文件名列表创建新数组
declare -a ArrayFullFileNameWithExtension=$(stat -f "%N" *)
indexOfModifiedArrayFullFileNameWithExtension=($ArrayFullFileNameWithExtension)
declare -a ArrayFullFileNameWithoutExtension=$(stat -f "%N" * | cut -c1-5 )
indexOfModifiedArrayFullFileNameWithoutExtension=($ArrayFullFileNameWithoutExtension)
最后,我制作了几个数组,这些数组最终具有相同的长度
下面是我的代码
CNT=$((${#indexOfcreateArray10digits[*]}-1)) # 17-1 = 16
last_file_index=$CNT
current_dir=1
make_clip_dir $current_dir
move_clip 0 $current_dir # what mean 0 ? 00000.MTS ?
# when not junked then will be make new folder by for - loop
function make_clip_dir {
mkdir "clip-"
}
# is this move_clip function right ?
function move_clip {
mv ${indexOfModifiedArrayFullFileNameWithExtension[]} "./clip-"
}
# please check below code is right or not .. very i am confused :-)
function connected_junks {
if [[ $((${indexOfcreateArray10digits[]} - ${indexOfmodifiedArray10digits[]})) -eq 0 ]];
then
#echo "$variable1"
#echo "$variable2"
echo " true !!"
elif [[ $((${indexOfcreateArray10digits[]} - ${indexOfmodifiedArray10digits[]})) -eq 1 ]];
then
echo " true !!"
else
echo " false!!!!!!!!!!!!!!!!!!!!! "
fi
}
echo "difference:"$((${indexOfcreateArray10digits[14]} - ${indexOfmodifiedArray10digits[13]}))
connected_junks 14 13
echo "1:"${indexOfcreateArray10digits[14]}
echo "0:"${indexOfmodifiedArray10digits[13]}
=============== results
difference:1
false!!!!!!!!!!!!!!!!!!!!! # i have no idea why this is false
1:1524058477
0:1524058395
============================================================
# for loop statement
for i in seq 1 $last_file_index
do
if [[ ! connected_junks $((i-1)) $i ]];
then
current_dir=$((current_dir+1))
make_clip_dir $current_dir
fi
move_clip $i $current_dir
done
# but won't works
# only clip-1 folder was created and 00000.MTS moved into this folder
#
########################### 结果错误
/twoArrayCompare.sh: line 170: conditional binary operator expected
/twoArrayCompare.sh: line 170: syntax error near `$((i-1))'
/twoArrayCompare.sh: line 170: ` if [[ connected_junks $((i-1)) $i ]];
你几乎已经把它写在你的草图上了。算法的思想就是按照你的红色箭头。
首先,您创建第一个目录并将第一个剪辑文件放在那里。
然后你可以从第二个迭代到最后一个,如果有指向前一个项目的箭头,则将该文件放入与前一个相同的目录中。否则,如果没有箭头,则创建一个新目录。
这是为您准备的该计划的主要内容:
last_file_index=16
current_dir=1
make_clip_dir $current_dir
move_clip 0 $current_dir
for i in $(seq 1 $last_file_index)
do
if ! connected_junks $((i-1)) $i
then
current_dir=$((current_dir+1))
make_clip_dir $current_dir
fi
move_clip $i $current_dir
done
您需要为此添加 move_clip
、make_clip_dir
和 connected_junks
函数。
最简单的是make_clip_dir
:
function make_clip_dir {
mkdir "clip-"
}
对于 connected_junks
,您可以利用 create/modified 数组和一些 if
条件,然后 return 1 或 0。
对于 move_clip
您需要格式化索引以形成名称“000NN.MTS”和 mv
到新目标的源文件。