我正在尝试创建一个shell脚本,将最后n个文件保存在目录中并删除其余文件。我正在使用的配置文件如下:
#config
dir1="/home/user/test"
n1="2"
dir2="/home/user/test/temp"
n2="3"
我打算实现的是转到dir1并保留最后的n1个文件。 我正在测试以下代码
source /home/cfolder/config
ls -t $dir1 | sed -e '1,'$n1'd' | xargs -d '\n' rm
如何在没有为每个dir和n组明确编写代码行的情况下让代码循环遍历所有配置参数?
答案 0 :(得分:1)
我不知道如何根据问题的设置方式做你想做的事情。但是,这是另一种可以用于此类问题的方法。
对于单独的配置,我喜欢使用名为X,Y或Z.conf的配置文件(当然,用有意义的名称替换X,Y和Z)。
在这些.conf文件中,使用dir
和n
代替dir1和n1。
#X.conf
dir="/home/user/test"
n="2"
和
#Y.conf
dir="/home/user/test/temp"
n="3"
然后,在bash脚本中,我会这样做:
# runconfigs.sh
for config in ./*.conf; do
<your_script_name_goes_here>.sh "$config"
done
在您的脚本中,您可以使用类似
的内容#yourscript.sh
source "$1"
ls -t $dir | sed -e '1,'$n'd' | xargs -d '\n' rm
然后,您只需运行./runconfigs.sh
即可。我发现当你处理许多配置时,这种方法会变得更有用,但我不明白为什么它在这里也不适用。
答案 1 :(得分:1)
为了更好的设计视角,建议如下配置文件,其中每行的第一个字段是目录,第二个是文件的数量,然后循环它
# config.conf
/home/user/test:5
/home/user/temp:2
# script.sh
#
while IFS=: read -r dir days; do
# your cmd to remove file using $dir and $days
cd $dir
ls -tr | head -n -$days | xargs rm
done < config.conf