我想用一些shell脚本在我的最新文件夹中评估最新的文件名。 因此,我在其中获取最新的文件夹名称和最新的文件名:
latest_folder=$(ls -td */ | head -n 1)
echo $latest_folder
cd $latest_folder
latest_file="$(ls -t *$str | head -n 1)"
echo $latest_file
文件夹结构:
base_folder
|
|---000
| |---123.*
| |---124.*
| |---...
| |---999.*
|
|---001
| |---997.*
| |---998.*
| |---999.*
其中 001 是最新的文件夹。如果此文件夹中的最新文件等于 999.*,我需要创建一个新文件夹 002。
有人有想法吗?
你的想法不远了。我建议不要cd
到最新的 dire,只需使用相同的方案通过附加latest_folder/
命令替换来获取该文件夹中的最新文件。
有了latest_file
,您可以简单地使用参数扩展和子字符串删除来隔离前导 3 位数字(例如filenum="${latest_file%%.*}"
(。之后,您可以根据filenum
决定是否需要新目录。
如果您确实需要创建一个新目录,则 use can 可以使用printf -v
来利用字段宽度修饰符和'0'
填充来格式化您的new_folder
名称002
,只需将1
添加到latest_folder
数字,例如printf -v new_folder "%03d" $((latest_folder + 1))
注意:这是在从latest_folder
中删除前导零以防止在添加1
以获得new_folder
数时解释为八进制常数之后,例如$((latest_folder + 1))
.
总而言之,您应该能够执行类似于以下操作的操作:
#!/bin/bash
limit=999
latest_folder="$(ls -td */ | head -n 1)" ## latest folder
latest_folder="${latest_folder:0:(-1)}" ## remove / at end
latest_file="$(ls -t "$latest_folder/" | head -n 1)" ## latest file
filenum="${latest_file%%.*}" ## isolate ###
if ((filenum == limit)); then ## if ### = 999
n=0
while [ "${latest_folder:n:1}" = '0' ]; do ## remove zeros
latest_folder="${latest_folder:$((n+1))}"
((n++))
done
printf -v new_folder "%03d" $((latest_folder + 1)) ## new folder name
mkdir -p new_folder ## create new folder
fi
注意:您通常应该使用find
和sort
来获取目录和文件名的列表(使用-maxdepth
和-type
来控制搜索的文件/目录的深度和类型(
如果您有任何疑问,请告诉我。