首页 > 解决方案 > 使用变量作为路径删除旧文件

问题描述

#!/bin/bash

START_TIME=$(date +%s)
timestamp=$(date +%Y%m%d_%H%M%S)
path=$pathfile
filename=logFile_$timestamp.txt

find $pathfile -name "*.txt"  -type f -mtime +10 -print >> /root/$filename

echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> /root/$filename

END_TIME=$(date +%s)

ELAPSED_TIME=$(expr $END_TIME - $START_TIME)

echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> /root/$filename
echo "Elapsed Time ::  $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) ">>  /root/$filename 

我想从特定路径中删除文件,路径将在单独的文件中定义。因此,脚本的编写如下所述以从文件中读取路径,但问题是脚本没有获取文件中提到的路径。有人可以帮忙吗?文件名:路径文件 /root/abc/dir1 /root/xyz/dir2 /etc/var/dir3

标签: bashshell

解决方案


假设我正确地遵循了这一点,你有一个文件,在某些时候你分配给变量“pathfile”,它包含以下条目:

/root/abc/dir1
/root/xyz/dir2
/etc/var/dir3

假设上述情况属实, find 命令不会从文件中读取,因此您需要使用 while 循环从文件中读取,然后使用结果路径调用 find 命令:

while read -r path
do
  find "$path" -name "*.txt"  -type f -mtime +10 -print >> /root/$filename
  echo "Backup:: Script Start -- $(date +%Y%m%d_%H%M)" >> /root/$filename

  END_TIME=$(date +%s)

  ELAPSED_TIME=$(expr $END_TIME - $START_TIME)
  # Alternative -- (( ELAPSED_TIME = END_TIME - START_TIME ))
  echo "Backup :: Script End -- $(date +%Y%m%d_%H%M)" >> /root/$filename
  echo "Elapsed Time ::  $(date -d 00:00:$ELAPSED_TIME +%Hh:%Mm:%Ss) ">>  /root/$filename
done<"$pathfile"

如果我误解了你可能需要进一步解释?


推荐阅读