Bash 将旧文件归档到不同的文件

Bash 将旧文件归档到不同的文件,bash,shell,unix,Bash,Shell,Unix,过去,我使用以下命令将旧文件归档到一个文件中 find . -mtime -1 | xargs tar -cvzf archive.tar 现在假设我们有20个目录,我需要在每个目录中创建一个脚本,并将所有文件归档到与原始文件同名的不同文件中 假设我在一个名为/Home/basic的目录中有以下文件/ 此目录包含以下文件: first_file.txt second_file.txt third_file.txt 现在,在运行完脚本后,我需要如下输出: first_file_05112014

过去,我使用以下命令将旧文件归档到一个文件中

find . -mtime -1 | xargs tar -cvzf archive.tar
现在假设我们有20个目录,我需要在每个目录中创建一个脚本,并将所有文件归档到与原始文件同名的不同文件中

假设我在一个名为/Home/basic的目录中有以下文件/ 此目录包含以下文件:

first_file.txt
second_file.txt
third_file.txt
现在,在运行完脚本后,我需要如下输出:

first_file_05112014.tar
second_file_05112014.tar
third_file_05112014.tar
使用:

find-键入f-mtime-1 | xargs-I文件tar-cvzf file.tar.gz文件

我添加了.gz来表示它的压缩

man xargs

 -I replace-str
     Replace occurrences of replace-str in the initial-arguments with names
     read from standard input.  Also, unquoted blanks do not terminate input
     items; instead the separator is the newline character.  Implies -x and -L 1.
find命令将生成文件路径列表
-L1
表示每一整行都将作为命令的输入

-I file
将文件路径分配给
file
,然后tar命令行中出现的
file
将被其值替换,即文件路径

因此,对于ex,如果find生成文件路径
/somedir/abc.txt
,则相应的tar命令如下所示:

tar -czvf ./somedir/abc.txt.tar.gz ./somedir/abc.txt
这正是我们想要的。每个文件路径都会发生这种情况。

使用:

find-键入f-mtime-1 | xargs-I文件tar-cvzf file.tar.gz文件

我添加了.gz来表示它的压缩

man xargs

 -I replace-str
     Replace occurrences of replace-str in the initial-arguments with names
     read from standard input.  Also, unquoted blanks do not terminate input
     items; instead the separator is the newline character.  Implies -x and -L 1.
find命令将生成文件路径列表
-L1
表示每一整行都将作为命令的输入

-I file
将文件路径分配给
file
,然后tar命令行中出现的
file
将被其值替换,即文件路径

因此,对于ex,如果find生成文件路径
/somedir/abc.txt
,则相应的tar命令如下所示:

tar -czvf ./somedir/abc.txt.tar.gz ./somedir/abc.txt
这正是我们想要的。每个文件路径都会发生这种情况。

使用:

find-键入f-mtime-1 | xargs-I文件tar-cvzf file.tar.gz文件

我添加了.gz来表示它的压缩

man xargs

 -I replace-str
     Replace occurrences of replace-str in the initial-arguments with names
     read from standard input.  Also, unquoted blanks do not terminate input
     items; instead the separator is the newline character.  Implies -x and -L 1.
find命令将生成文件路径列表
-L1
表示每一整行都将作为命令的输入

-I file
将文件路径分配给
file
,然后tar命令行中出现的
file
将被其值替换,即文件路径

因此,对于ex,如果find生成文件路径
/somedir/abc.txt
,则相应的tar命令如下所示:

tar -czvf ./somedir/abc.txt.tar.gz ./somedir/abc.txt
这正是我们想要的。每个文件路径都会发生这种情况。

使用:

find-键入f-mtime-1 | xargs-I文件tar-cvzf file.tar.gz文件

我添加了.gz来表示它的压缩

man xargs

 -I replace-str
     Replace occurrences of replace-str in the initial-arguments with names
     read from standard input.  Also, unquoted blanks do not terminate input
     items; instead the separator is the newline character.  Implies -x and -L 1.
find命令将生成文件路径列表
-L1
表示每一整行都将作为命令的输入

-I file
将文件路径分配给
file
,然后tar命令行中出现的
file
将被其值替换,即文件路径

因此,对于ex,如果find生成文件路径
/somedir/abc.txt
,则相应的tar命令如下所示:

tar -czvf ./somedir/abc.txt.tar.gz ./somedir/abc.txt

这正是我们想要的。每个文件路径都会发生这种情况。

这个shell脚本怎么样

#!/bin/sh

mkdir /tmp/junk  #Easy for me to clean up!
for p in `find . -mtime -1 -type f`
do
    dir=`dirname "$p"` 
    file=`basename "$p"`
    tar cvf /tmp/junk/${file}.tar $p
done
它使用basename命令提取文件名,使用dirname命令提取目录名。我实际上没有使用这个目录,但我把它放在那里了,以防你发现它很方便


我把所有的tar文件放在一个地方,这样我就可以很容易地删除它们,但是如果您想将它们放在同一个目录中,您可以很容易地将$p替换为$file。

这个shell脚本怎么样

#!/bin/sh

mkdir /tmp/junk  #Easy for me to clean up!
for p in `find . -mtime -1 -type f`
do
    dir=`dirname "$p"` 
    file=`basename "$p"`
    tar cvf /tmp/junk/${file}.tar $p
done
它使用basename命令提取文件名,使用dirname命令提取目录名。我实际上没有使用这个目录,但我把它放在那里了,以防你发现它很方便


我把所有的tar文件放在一个地方,这样我就可以很容易地删除它们,但是如果您想将它们放在同一个目录中,您可以很容易地将$p替换为$file。

这个shell脚本怎么样

#!/bin/sh

mkdir /tmp/junk  #Easy for me to clean up!
for p in `find . -mtime -1 -type f`
do
    dir=`dirname "$p"` 
    file=`basename "$p"`
    tar cvf /tmp/junk/${file}.tar $p
done
它使用basename命令提取文件名,使用dirname命令提取目录名。我实际上没有使用这个目录,但我把它放在那里了,以防你发现它很方便


我把所有的tar文件放在一个地方,这样我就可以很容易地删除它们,但是如果您想将它们放在同一个目录中,您可以很容易地将$p替换为$file。

这个shell脚本怎么样

#!/bin/sh

mkdir /tmp/junk  #Easy for me to clean up!
for p in `find . -mtime -1 -type f`
do
    dir=`dirname "$p"` 
    file=`basename "$p"`
    tar cvf /tmp/junk/${file}.tar $p
done
它使用basename命令提取文件名,使用dirname命令提取目录名。我实际上没有使用这个目录,但我把它放在那里了,以防你发现它很方便



我将所有的tar文件放在一个地方,这样我可以很容易地删除它们,但是如果您想将它们放在同一个目录中,您可以很容易地将$p替换为$file。

您的意思是要将每个目录的存档名称与正在存档的目录的名称相似。@Vivek我想将每个文件存档在不同的目录中一个输入文件需要一个输出存档文件。为什么不使用tar的-r选项将每个目录附加到tar文件中呢。然后,您只需对要添加的每个目录运行一次命令。您考虑过logrotate吗?@Basilevs抱歉不熟悉logrotate您的意思是要用与被归档目录名称相似的归档名称来归档每个目录吗。@Vivek我要归档不同目录中的每个文件,需要一个输出一个输入文件的存档文件。为什么不使用tar的-r选项将每个目录附加到tar文件中呢。然后,您只需为要添加的每个目录运行一次命令。您考虑过logrotate吗?@Basilevs抱歉,不熟悉logrotateDo