简短的tar脚本:尝试将今天的日期添加到压缩文件名时出现“找不到命令”

时间:2018-12-29 04:28:35

标签: bash shell date tar

我正在尝试创建将执行以下操作的脚本:

  1. 如果/ home / testuser / backup不存在,则将其创建为目录(如果存在,则不会显示错误消息)
  2. 获取当前日期并将其存储为变量
  3. 使用Tar:
    • 备份整个projectfiles目录
    • 备份以gzip格式压缩为存档格式
    • 使用存储的变量将日期包括在tar文件名中
    • 备份进入/ home / testuser / backup目录
    • 创建一个名为testuser.log的日志文件,其中包含tar命令生成的所有消息(使用详细模式)
    • 将日志文件保存在/home/testuser/backup/testuser.log

我在使用命令语法时遇到麻烦,我不太了解自己在做什么错。

cd /home/testuser

mkdir -p /home/testuser/backup

today=$(date'+%d-%m-%y')

tar -zcvf testuserbackup-$today.tar.gz projectfiles && 
testuserbackup-$today.tar.gz /home/testuser/backup

testuserbackup-$today.tar.gz >> testuser.log 2>/dev/null

mv testuser.log /home/testuser/backup

当我尝试运行脚本时,得到以下终端输出:

./script2.sh: line 6: date+%d-%m-%y: command not found
projectfiles/
projectfiles/budget/
projectfiles/budget/testuserbudget1.txt
projectfiles/budget/testuserbudget2.txt
projectfiles/old/
projectfiles/old/testuserold2.txt
projectfiles/old/testuserold1.txt
projectfiles/documents/
projectfiles/documents/testuserdoc2.txt
projectfiles/documents/testuserdoc1.txt
./script2.sh: line 7: testuserbackup-.tar.gz: command not found

我愿意接受任何建议。这项任务来自上学期的一项旧作业,我正在重新找乐子... 根据我以前的作业记录,此任务应该可以用不超过4行代码来完成。

**编辑:**脚本完成(在约翰的协助下)

#!/bin/bash
mkdir -p /home/testuser/backup
today=$(date '+%d-%m-%y')
tar -zcvf backup/testuserbackup-"$today".tar.gz projectfiles > 
backup/testuser.log 2>&1

1 个答案:

答案 0 :(得分:0)

您缺少空格:

string

此外,这些行应全部合并:

class Program
{
   static void Main(string[] args)
   {
      List<string> CustomerList_One = new List<string> 
      {
         "James",
         "Scott",
         "Mark",
         "John",
         "Sara",
         "Mary",
         "William",
         "Broad",
         "Ben",
         "Rich",
         "Hack",
         "Bob"
      };

      List<string> CustomerList_Two = new List<string> 
      {
         "Perter",
         "Parker",
         "Bond",
         "been",
         "Bilbo",
         "Cooper"
      };

      // Adding all contents of CustomerList_Two to CustomerList_One.
      CustomerList_One.AddRange(CustomerList_Two);

      // Creating another Listlist and assigning all Contents of CustomerList_One.
      List<string> AllCustomers = new List<string>();

      foreach (var item in CustomerList_One)
      {
         AllCustomers.Add(item);
      }

      // Removing CustomerList_One & CustomerList_Two.
      CustomerList_One = null;

      CustomerList_Two = null;
      // CustomerList_One & CustomerList_Two -- (Garbage Collected)
      GC.Collect();

      Console.WriteLine("Total No. of Customers : " +  AllCustomers.Count());
      Console.WriteLine("-------------------------------------------------");
      foreach (var customer in AllCustomers)
      {
         Console.WriteLine("Customer : " + customer);
      }
      Console.WriteLine("-------------------------------------------------");

   }
}

需要在与today=$(date '+%d-%m-%y') # ^ 命令相同的行中创建日志文件,并且可以通过写出它们的完整路径来使tarball和日志文件显示在正确的位置。这样就不必再将它们移动了。

tar -zcvf testuserbackup-$today.tar.gz projectfiles && 
testuserbackup-$today.tar.gz /home/testuser/backup

testuserbackup-$today.tar.gz >> testuser.log 2>/dev/null

mv testuser.log /home/testuser/backup

捕获stderr和stdout是一个好主意,因此我将tar更改为tar -zcvf backup/testuserbackup-"$today".tar.gz projectfiles > backup/testuser.log 2>&1