Linux 压缩文件列表时,文件名中包含空格

Linux 压缩文件列表时,文件名中包含空格,linux,bash,tar,Linux,Bash,Tar,我一直在尝试使用bash文件压缩一组文件,这些文件的文件名中包含空格。bash文件是: #!/bin/bash tar -cPf 'myconfigs.tar' `cat myconfigs.list` myconfigs.list文件的内容是: /home/anas/.config/chromium/Default/Bookmarks /home/anas/.config/chromium/Default/Login Data /home/anas/.config/chromium/Defa

我一直在尝试使用bash文件压缩一组文件,这些文件的文件名中包含空格。bash文件是:

#!/bin/bash
tar -cPf 'myconfigs.tar' `cat myconfigs.list`
myconfigs.list文件的内容是:

/home/anas/.config/chromium/Default/Bookmarks
/home/anas/.config/chromium/Default/Login Data
/home/anas/.config/chromium/Default/Login Data-journal
问题是文件名中包含空格的文件不会包含在结果TAR存档中。 我尝试了“”、“”、%20。。。但是没有起作用


提前感谢您的帮助。

不要像那样使用cat的输出,否则空格将被视为
tar
命令的分隔符和分隔参数

您可以使用:

阿纳斯

我认为您需要使用:

tar -cPf myconfigs.tar -T myconfigs.list
而不是你的“猫”。如果正确地转义其中的文件名,cat也应该可以工作,但是-T更好

更新了(在评论中回答您的问题): 我不能评论你的问题(没有足够的声誉),所以我决定改进我的答案

tilde(~)扩展是一个shell,tar不支持它。但是,要实现您想要实现的目标,您可以使用以下技巧:

  • 在myconfigs.list文件中使用相对路径(相对于主目录):
.config/chromium/Default/Bookmarks .config/chromium/Default/Login数据 .config/chromium/Default/Login数据日志
  • 运行tar时,它会在启动时将目录更改为您的主目录:
tar-cPf myconfigs.tar-C~/-T myconfigs.list 好的,我继续并创建了一个示例会话来演示它:

root@web:~ # useradd -m galaxy
root@web:~ # su - galaxy
galaxy@web:~ $ mkdir -p {1,2}/{3,4}/{5,6,7}
galaxy@web:~ $ find . -xdev -type d -exec touch '{}/file.txt' \;
galaxy@web:~ $ cat << EOF > include.lst
> 1/3
> 1/4/5/file.txt
> 1/4/7
> 2/file.txt
> EOF
galaxy@web:~ $ cd 2/3/6
galaxy@web:~/2/3/6 $ tar cjSpf ~/sample.tar.bz2 -C ~/ -T ~/include.lst
galaxy@web:~/2/3/6 $ cd
galaxy@web:~ $ tar tjvf sample.tar.bz2
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/7/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/7/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/6/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/6/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/5/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/5/file.txt
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/4/5/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/4/7/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/4/7/file.txt
-rw------- galaxy/galaxy     0 2014-02-19 04:10 2/file.txt
galaxy@web:~ $
root@web:~#useradd-m galaxy
root@web:~#苏-银河
galaxy@web:~$mkdir-p{1,2}/{3,4}/{5,6,7}
galaxy@web:~$find-xdev-type d-exec touch'{}/file.txt'\;
galaxy@web:~$cat include.lst
> 1/3
>1/4/5/file.txt
> 1/4/7
>2/file.txt
>EOF
galaxy@web:~$cd 2/3/6
galaxy@web:~/2/3/6$tar cjSpf~/sample.tar.bz2-C~/-T~/include.lst
galaxy@web:~/2/3/6美元cd
galaxy@web:~$tar tjvf sample.tar.bz2
drwx------星系/星系0 2014-02-19 04:10 1/3/
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/3/file.txt
drwx------星系/星系0 2014-02-19 04:10 1/3/7/
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/3/7/file.txt
drwx------星系/星系0 2014-02-19 04:10 1/3/6/
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/3/6/file.txt
drwx------星系/星系0 2014-02-19 04:10 1/3/5/
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/3/5/file.txt
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/4/5/file.txt
drwx------星系/星系0 2014-02-19 04:10 1/4/7/
-rw------galaxy/galaxy 0 2014-02-19 04:10 1/4/7/file.txt
-rw------galaxy/galaxy 0 2014-02-19 04:10 2/file.txt
galaxy@web:~ $

这应该给你一个开始:)

@galaxy,@anubhava:BTW,我正试图用
~/
替换
~/
,但我失败了,有什么解决办法吗?嗯,应该有。您是否收到任何错误消息?检查tar文档中的-T和-C选项。一些tar允许您将-C合并到与-T一起使用的文件中。哦,你在哪个用户下运行这个命令?如果不是“anas”,则需要使用“~anas/”而不是“~/”。因此,我收到一个空的
myconfigs.tar
文件。要点是:我想备份当前用户的文件,而不管用户的名字是什么;只需当前用户(
~/
)。顺便说一句,我使用的是tarv1.26。 .config/chromium/Default/Bookmarks .config/chromium/Default/Login Data .config/chromium/Default/Login Data-journal tar -cPf myconfigs.tar -C ~/ -T myconfigs.list
root@web:~ # useradd -m galaxy
root@web:~ # su - galaxy
galaxy@web:~ $ mkdir -p {1,2}/{3,4}/{5,6,7}
galaxy@web:~ $ find . -xdev -type d -exec touch '{}/file.txt' \;
galaxy@web:~ $ cat << EOF > include.lst
> 1/3
> 1/4/5/file.txt
> 1/4/7
> 2/file.txt
> EOF
galaxy@web:~ $ cd 2/3/6
galaxy@web:~/2/3/6 $ tar cjSpf ~/sample.tar.bz2 -C ~/ -T ~/include.lst
galaxy@web:~/2/3/6 $ cd
galaxy@web:~ $ tar tjvf sample.tar.bz2
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/7/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/7/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/6/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/6/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/3/5/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/3/5/file.txt
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/4/5/file.txt
drwx------ galaxy/galaxy     0 2014-02-19 04:10 1/4/7/
-rw------- galaxy/galaxy     0 2014-02-19 04:10 1/4/7/file.txt
-rw------- galaxy/galaxy     0 2014-02-19 04:10 2/file.txt
galaxy@web:~ $