是否有一个简单的shell命令/脚本支持排除某些文件/文件夹被存档?
我有一个目录需要使用子目录进行存档,该子目录包含许多我不需要备份的非常大的文件.
不完全解决方案:
该tar --exclude=PATTERN
命令与给定模式匹配并排除这些文件,但我需要忽略特定文件和文件夹(完整文件路径),否则可能会排除有效文件.
我还可以使用find命令创建文件列表并排除我不想存档的文件并将列表传递给tar,但这仅适用于少量文件.我有成千上万.
我开始认为唯一的解决方案是创建一个文件,其中包含要排除的文件/文件夹列表,然后使用rsync --exclude-from=file
将所有文件复制到tmp目录,然后使用tar来存档该目录.
谁能想到更好/更有效的解决方案?
编辑:cma的解决方案效果很好.最重要的是--exclude='./folder'
必须在tar命令的开头.完整命令(cd首先,所以备份是相对于该目录):
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
Run Code Online (Sandbox Code Playgroud) 我通常这样做:
tar -czvf my_directory.tar.gz my_directory
Run Code Online (Sandbox Code Playgroud)
如果我只想在my_directory中包含所有内容(包括任何隐藏的系统文件),而不是目录本身,该怎么办?我不想要:
my_directory
--- my_file
--- my_file
--- my_file
Run Code Online (Sandbox Code Playgroud)
我想要:
my_file
my_file
my_file
Run Code Online (Sandbox Code Playgroud) 我在备份shell脚本的部分中有以下命令:
tar -cjf site1.bz2 /var/www/site1/
Run Code Online (Sandbox Code Playgroud)
当我列出档案的内容时,我得到:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Run Code Online (Sandbox Code Playgroud)
但我想/var/www/site1
从归档中的目录和文件名中删除该部分,以简化提取并避免无用的常量目录结构.永远都不知道,如果我在一个没有存储网络数据的地方提取备份网站/var/www
.
对于上面的例子,我想:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Run Code Online (Sandbox Code Playgroud)
因此,当我提取时,文件在当前目录中被提取,之后我不需要移动提取的文件,因此保留了子目录结构.
关于tar和备份在stackoverflow
网上和网上其他地方已经有很多问题,但是大多数都要求放弃整个子目录结构(展平),或者只是添加或删除名称中的首字母/(我不是知道它在提取时的确切变化),但不多了.
在阅读了这里和那里发现的一些解决方案以及手册之后,我尝试了:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Run Code Online (Sandbox Code Playgroud)
但它们都没有按我想要的方式工作.有些人什么都不做,有些人不再存档子目录.
它位于由Cron启动的备份shell脚本中,所以我不太清楚,哪个用户运行它,路径和当前目录是什么,因此总是需要编写绝对路径,并且不希望更改当前目录避免在脚本中进一步破坏(因为它不仅备份网站,还备份数据库,然后将所有内容发送到FTP等)
怎么做到这一点?
我只是误解了选项-C的工作原理吗?
我通常压缩使用tar zcvf
和解压缩使用tar zxvf
(由于习惯使用gzip).
我最近得到了一个具有超线程的四核CPU,所以我有8个逻辑核心,我注意到许多核心在压缩/解压缩期间未被使用.
有什么办法可以利用未使用的核心来加快速度吗?
我有一个文件,其中包含我想用tar存档的文件列表.我们称之为mylist.txt
它包含:
file1.txt
file2.txt
...
file10.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法可以发出mylist.txt
作为输入的TAR命令?就像是
tar -cvf allfiles.tar -[someoption?] mylist.txt
Run Code Online (Sandbox Code Playgroud)
所以它就像我发出这个命令一样:
tar -cvf allfiles.tar file1.txt file2.txt file10.txt
Run Code Online (Sandbox Code Playgroud) 我试图.tar.xz
在一个命令中创建一个压缩存档.具体的语法是什么?
我试过了tar cf - file | xz file.tar.xz
,但那不起作用.
我想提取一个名为的存档filename.tar.gz
.
使用tar -xzvf filename.tar.gz
不提取文件.它给出了这个错误:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error exit delayed from previous errors
Run Code Online (Sandbox Code Playgroud) 我有一个/public_html/
文件夹,在该文件夹中有一个/tmp/
文件夹,其中包含70gb的文件,我并不需要.
现在,我想创建一个.tar.gz
的/public_html/
排除/tmp/
这是我跑的命令:
tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/"
Run Code Online (Sandbox Code Playgroud)
tar仍在创建,通过做一个ls -sh
我可以看到MyBackup.tar.gz
已经有大约30gb,我肯定知道/public_html/
没有/tmp/
超过1GB的文件.
我做错了什么?