过去我使用以下命令将旧文件存档到一个文件
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
答案 0 :(得分:2)
使用:
find . -type f -mtime -1 | xargs -I file tar -cvzf file.tar.gz file
我添加了.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命令将生成文件路径列表。 -L 1
表示每一行都将作为命令的输入。
-I file
会将文件路径分配给file
,然后tar命令行中每次出现的file
都将被其值替换,即文件路径。
因此,对于ex,如果find生成文件路径./somedir/abc.txt
,则相应的tar命令将如下所示:
tar -czvf ./somedir/abc.txt.tar.gz ./somedir/abc.txt
这是所希望的。这将发生在每个文件路径上。
答案 1 :(得分:1)
这个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。