【问题标题】:Shell command to tar directory excluding certain files/foldersShell 命令到 tar 目录,不包括某些文件/文件夹
【发布时间】:2010-11-02 07:44:08
【问题描述】:

是否有一个简单的 shell 命令/脚本支持将某些文件/文件夹排除在存档之外?

我有一个需要存档的目录和一个子目录,其中包含许多我不需要备份的非常大的文件。

不完全解决方案:

tar --exclude=PATTERN 命令匹配给定模式并排除这些文件,但我需要忽略特定文件和文件夹(完整文件路径),否则可能会排除有效文件。

我还可以使用 find 命令创建文件列表并排除我不想归档的文件并将列表传递给 tar,但这仅适用于少量文件。我有几万。

我开始认为唯一的解决方案是创建一个包含要排除的文件/文件夹列表的文件,然后使用 rsync 和 --exclude-from=file 将所有文件复制到 tmp 目录,然后使用 tar归档该目录。

谁能想到更好/更有效的解决方案?

编辑:Charles Ma 的解决方案效果很好。最大的问题是 --exclude='./folder' 必须 位于 tar 命令的开头。完整命令(cd 首先,所以备份是相对于该目录):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

【问题讨论】:

  • 另一件事引起了我的注意,可能值得一提:排除文件夹末尾的 斜杠 将导致 tar not 排除那些文件夹。
  • @Rekhyt 谢谢,我盯着命令看了 15 分钟……然后 30 分钟
  • 似乎 --exclude 的位置取决于 tar 的版本。对于 tar 1.23,--exclude 需要在主要命令之后。
  • 不要忘记“'”(引号)。
  • --exclude 不必是第一个,但它必须位于源目录之前的某个位置(在 Cygwin 上使用 tar 1.29 进行了测试)。

标签: linux shell archive tar


【解决方案1】:

你可以有多个 tar 的排除选项

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

等会起作用。确保确保--exclude放在源和目标项之前。

【讨论】:

  • 这个答案看起来像是 --exclude 排在第一位... tar cvfpz ../stuff.tgz --exclude='node_modules' --exclude='.git' .
  • 举个例子,如果你想备份你的wordpress项目文件夹,不包括uploads文件夹,你可以使用这个命令:tar -cvf wordpress_backup.tar wordpress --exclude=wp-内容/上传
  • 我想出了以下命令:tar -zcv --exclude='file1' --exclude='patter*' --exclude='file2' -f /backup/filename.tgz . 注意-f 标志需要在 tar 文件之前看到:superuser.com/a/559341/415047
  • 排除目录末尾的“/”会导致它失败。我猜 tar 认为结尾 / 是要排除的目录名称的一部分。不好:--exclude=mydir/ 好:--exclude=mydir
  • > 确保将 --exclude 放在源和目标项之前。或为排除使用绝对路径: tar -cvpzf backups/target.tar.gz --exclude='/home/username/backups' /home/username
【解决方案2】:

您可以使用--exclude 排除目录以进行 tar。

如果您想归档除/usr 之外的所有内容,您可以使用:

tar -zcvf /all.tgz / --exclude=/usr

在你的情况下可能是这样的

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir

【讨论】:

  • 为了澄清,您可以使用 --exclude 的完整路径。
  • 在某些情况下,需要 --exclude 在要归档的文件/文件夹之前
  • 注意--exclude=dir/ignore_this_dir 也会匹配到any 子树!您最终会丢失您没想到会被排除在外的文件。
【解决方案3】:

使用 tar 从备份中排除文件/目录的可能选项:

使用多种模式排除文件

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

使用包含模式列表的排除文件排除文件

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

通过将标签文件放置在应跳过的任何目录中来使用标签排除文件

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup

【讨论】:

  • 参数的顺序似乎很重要,这种形式对我有用。
  • 我也是。对于 Ubuntu 16.04 上的 tar (GNU tar) 1.28,只有这个特定的参数顺序有效。
【解决方案4】:

有很多答案的老问题,但我发现没有一个对我来说足够清楚,所以我想添加我的尝试。

如果你有以下结构

/home/ftp/mysite/

带有以下文件/文件夹

/home/ftp/mysite/file1
/home/ftp/mysite/file2
/home/ftp/mysite/file3
/home/ftp/mysite/folder1
/home/ftp/mysite/folder2
/home/ftp/mysite/folder3

所以,你想制作一个包含 /home/ftp/mysite 中所有内容的 tar 文件(将站点移动到新服务器),但 file3 只是垃圾,folder3 中的所有内容也不是需要,所以我们将跳过这两个。

我们使用格式

tar -czvf <name of tar file> <what to tar> <any excludes>

其中 c = create、z = zip 和 v = verbose(您可以在输入文件时看到它们,这有助于确保没有添加您排除的文件)。和 f= 文件。

所以,我的命令应该是这样的

cd /home/ftp/
tar -czvf mysite.tar.gz mysite --exclude='file3' --exclude='folder3'

请注意,排除的文件/文件夹相对于您的 tar 的根目录(我在这里尝试了相对于 / 的完整路径,但我无法做到这一点)。

希望这会对某人有所帮助(以及下次我谷歌搜索时的我)

【讨论】:

  • 这个答案对我很有帮助!对我来说,问题是我的命令看起来像 tar -czvf mysite.tar.gz mysite --exclude='./mysite/file3' --exclude='./mysite/folder3',这并没有排除任何东西。
  • 您的样本与我遇到的问题非常相似!谢谢!
  • 很好,很清楚,谢谢。对我来说,问题是其他答案包括相对路径的绝对路径。但是您所要做的就是添加要排除的文件夹的名称。
  • 这是一个更明确的答案。由于这个例子,我能够让它工作,因为路径起初令人困惑。非常感谢!
  • 成功了!请记住不要在排除项中添加尾部斜杠。例如,虽然“file3”或“file3/subfolder”有效,但“file3/”和“file3/subfolder/”无效!
【解决方案5】:

您可以使用标准的“ant notation”来排除相对目录。
这对我有用,不包括任何 .git 或 node_module 目录:

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/*  -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txt 包含:

/dev2/java
/dev2/javascript

【讨论】:

  • 我相信这需要启用 Bash shell 选项变量globstar。请与shopt -s globstar 联系。我认为它在大多数基于 unix 的操作系统上默认 关闭。来自 Bash 手册:“globstar: 如果设置,则在文件名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟'/',只有目录和子目录匹配。"
【解决方案6】:

此排除模式处理文件名后缀(如 png 或 mp3)以及目录名(如 .git 和 node_modules)

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball}  ${source_dirname}

【讨论】:

  • 大括号的问题,它们会破坏你的 bash 函数 :-)
【解决方案7】:

我经历过这种情况,至少在我使用的 Cygwin 版本的 tar 中 ("CYGWIN_NT-5.1 1.7.17(0.262/5/3) 2012-10-19 14: 39 i686 Cygwin”在 Windows XP Home Edition SP3 机器上),选项的顺序很重要。

虽然这种结构对我有用:

tar cfvz target.tgz --exclude='<dir1>' --exclude='<dir2>' target_dir

那个没有工作:

tar cfvz --exclude='<dir1>' --exclude='<dir2>' target.tgz target_dir

tar --help 揭示了以下内容:

tar [OPTION...] [FILE]

所以,第二个命令也应该可以工作,但显然情况似乎并非如此......

最佳 rgds,

【讨论】:

  • 只是想补充一下,要排除的目录不应包含最后的反斜杠,这一点很重要。所以,--exclude='/path/to/exclude/dir'CORRECT--exclude='/path/to/exclude/dir/ '错误
  • 这是因为目标存档 target.tgz 是 f 开关的参数,它应该遵循
【解决方案8】:

我在其他地方发现了这个,所以我不会把功劳,但对于我的 mac 特定问题,它比上述任何解决方案都更有效(即使它已关闭):

tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>

【讨论】:

  • 感谢您的回答,darwin 上的 tar 肯定有不同的语法,这让我发疯了,为什么其他答案中的“--exclude=blah”不起作用。这在 Mac 上效果很好。
  • 使用tar时不要忘记COPYFILE_DISABLE=1,否则you may get ._ files in your tarball
  • 感谢您的回答。包含指向您找到答案的来源的链接总是很好的。奖励:如果来源来自另一个 stackoverflow 或 stackexchange 帖子,您将获得额外的业力(积分或徽章 - 我不记得是哪个)。无论哪种方式,他们都会微笑,每个人都会赢。没有缺点:-) 如果想要搜索额外信息,它也可以帮助人们。有时人们会因为您包含源链接而投票。最后,分享一下这个解决的具体问题,或者为什么这是一个更好的解决方案,它可能会帮助其他有独特问题的人。
【解决方案9】:

对于 Mac OSX 我必须这样做

tar -zcv --exclude='folder' -f theOutputTarFile.tar folderToTar

注意--exclude=后面的-f

【讨论】:

    【解决方案10】:

    对于那些有问题的人,某些版本的 tar 只有在排除值中没有“./”的情况下才能正常工作。

    Tar --version
    

    tar (GNU 焦油) 1.27.1

    有效的命令语法:

    tar -czvf ../allfiles-butsome.tar.gz * --exclude=acme/foo
    

    这些不起作用:

    $ tar -czvf ../allfiles-butsome.tar.gz * --exclude=./acme/foo
    $ tar -czvf ../allfiles-butsome.tar.gz * --exclude='./acme/foo'
    $ tar --exclude=./acme/foo -czvf ../allfiles-butsome.tar.gz *
    $ tar --exclude='./acme/foo' -czvf ../allfiles-butsome.tar.gz *
    $ tar -czvf ../allfiles-butsome.tar.gz * --exclude=/full/path/acme/foo
    $ tar -czvf ../allfiles-butsome.tar.gz * --exclude='/full/path/acme/foo'
    $ tar --exclude=/full/path/acme/foo -czvf ../allfiles-butsome.tar.gz *
    $ tar --exclude='/full/path/acme/foo' -czvf ../allfiles-butsome.tar.gz *
    

    【讨论】:

      【解决方案11】:

      在阅读了针对不同版本的所有这些好的答案并为自己解决了问题之后,我认为有非常小的细节非常重要,并且对于 GNU/Linux 的一般用途来说很少见,它们是压力不够,比 cmets 更值得。

      所以我不会尝试针对每种情况都回答这个问题,而是尝试在事情不起作用时注册在哪里查看

      请注意:

      1. 选项的顺序很重要:将 --exclude 放在文件选项和要备份的目录之前与之后是不一样的。这至少对我来说是出乎意料的,因为根据我的经验,在 GNU/Linux 命令中,选项的顺序通常并不重要。
      2. 不同的 tar 版本需要此选项以不同的顺序: 例如,@Andrew's answer 表示在 GNU tar v 1.26 和 1.28 中,排除项排在最后,而在我的情况下,对于 GNU tar 1.29,它是另一个方式。
      3. 尾部斜线很重要:至少在 GNU tar 1.29 中,不应该是任何

      就我而言,对于 Debian stretch 上的 GNU tar 1.29,有效的命令是

      tar --exclude="/home/user/.config/chromium" --exclude="/home/user/.cache" -cf file.tar  /dir1/ /home/ /dir3/
      

      引号无关紧要,有无引号都可以。

      我希望这对某人有用。

      【讨论】:

      • 感谢您的回答。我一直在寻找(感觉很长时间)一个解决方案,你的回答引导我朝着正确的方向前进。但是,就我而言(Ubuntu 18.04.3,Tar 1.29),我只能通过添加文件夹名称而不是路径来使其工作,例如:tar --exclude=folder1 --exclude=folder2 -czvf /opt/archieve。 tgz 文件夹
      • 我在这个页面和 tar 版本 1.27.1 上尝试了大多数选项,这个答案对我有帮助。
      【解决方案12】:

      如果您尝试排除版本控制系统 (VCS) 文件,tar 已经支持两个有趣的选项! :)

      1. 选项:--exclude-vcs

      此选项不包括以下版本控制系统使用的文件和目录:CVSRCSSCCSSVNArchBazaarMercurialDarcs

      从 1.32 版开始,以下文件被排除在外:

      • CVS/,以及它下面的所有内容
      • RCS/,以及它下面的所有内容
      • SCCS/,以及它下面的所有内容
      • .git/,以及它下面的所有内容
      • .gitignore
      • .gitmodules
      • .gitattributes
      • .cvsignore
      • .svn/,以及它下面的所有内容
      • .arch-ids/,以及它下面的所有内容
      • {arch}/,以及它下面的所有内容
      • =RELEASE-ID
      • =meta-update
      • =update
      • .bzr
      • .bzrignore
      • .bzrtags
      • .hg
      • .hgignore
      • .hgrags
      • _darcs

        1. 选项:--exclude-vcs-ignores

      当归档某个版本控制系统 (VCS) 下的目录时,从该 VCS 的忽略文件(例如 .cvsignore.gitignore 等)中读取排除模式通常很方便。此选项提供了这种可能性。

      在归档目录之前,请查看它是否包含以下任何文件:cvsignore.gitignore.bzrignore.hgignore。如果是这样,请从这些文件中读取忽略模式。

      模式的处理方式与相应的 VCS 处理方式相同,即:

      .cvsignore

      包含仅适用于该文件所在目录的 shell 样式的通配模式。文件中不允许有 cmets。空行被忽略。

      .gitignore

      包含 shell 样式的通配符模式。适用于.gitfile所在目录及其所有子目录。

      任何以# 开头的行都是注释。反斜杠转义注释字符。

      .bzrignore

      包含 shell globbing-patterns 和正则表达式(如果前缀为 RE:(16)。模式会影响目录及其所有子目录。

      任何以# 开头的行都是注释。

      .hgignore

      包含posix正则表达式(17)。 syntax: glob 行切换到 shell 通配模式。 syntax: regexp 线切换回来。评论以# 开头。模式会影响目录及其所有子目录。

      1. 示例

      tar -czv --exclude-vcs --exclude-vcs-ignores -f path/to/my-tar-file.tar.gz path/to/my/project/

      【讨论】:

        【解决方案13】:

        我同意 --exclude 标志是正确的方法。

        $ tar --exclude='./folder_or_file' --exclude='file_pattern' --exclude='fileA'
        

        警告,我没有立即发现明显的副作用: 在此示例中排除“fileA”将搜索“fileA”RECURSIVELY!

        示例:具有单个子目录的目录,其中包含同名文件(data.txt)

        data.txt
        config.txt
        --+dirA
          |  data.txt
          |  config.docx
        
        • 如果使用 --exclude='data.txt',存档将不包含 EITHER data.txt 文件。如果归档第三方库,例如 node_modules 目录,这可能会导致意外结果。

        • 为避免此问题,请确保提供整个路径,例如 --exclude='./dirA/data.txt'

        【讨论】:

          【解决方案14】:

          阅读完这个帖子后,我在 RHEL 5 上做了一些测试,下面是我对 abc 目录进行 tar 处理的结果:

          这将排除目录错误和日志以及目录下的所有文件:

          tar cvpzf abc.tgz abc/ --exclude='abc/error' --exclude='abc/logs'
          

          在排除目录后添加通配符将排除文件但保留目录:

          tar cvpzf abc.tgz abc/ --exclude='abc/error/*' --exclude='abc/logs/*'
          

          【讨论】:

          • 在上面的第二个例子中,每个 exclude 子句的最后一个斜杠后面应该有星号,但帖子没有使用它们。
          【解决方案15】:

          我想展示另一个选项,我曾经得到与之前提供的答案相同的结果,我有一个类似的情况,我想将 android studio 项目全部备份到一个 tar 文件中以上传到媒体火,使用du 命令来查找大文件,我发现我不需要一些目录,例如: 构建,linux e .dart_tools 使用 Charles_ma 的第一个答案,我对其进行了一些修改,以便能够从我的 Android 目录的父目录运行命令。

          tar --exclude='*/build' --exclude='*/linux' --exclude='*/.dart_tool' -zcvf androidProjects.tar Android/
          

          它就像一个魅力。

          附言。对不起,如果不允许这种答案,如果是这种情况,我会删除。

          【讨论】:

            【解决方案16】:

            为避免在处理数万个文件时使用find ... | xargs ... 可能导致'xargs: Argument list too long' 错误,您可以使用find ... -print0 | tar --null ...find 的输出直接通过管道传输到tar

            # archive a given directory, but exclude various files & directories 
            # specified by their full file paths
            find "$(pwd -P)" -type d \( -path '/path/to/dir1' -or -path '/path/to/dir2' \) -prune \
               -or -not \( -path '/path/to/file1' -or -path '/path/to/file2' \) -print0 | 
               gnutar --null --no-recursion -czf archive.tar.gz --files-from -
               #bsdtar --null -n -czf archive.tar.gz -T -
            

            【讨论】:

            • 你可以引用'exclude'字符串,像这样:'somedir/filesdir/*' 然后shell不会扩展星号和其他白色字符。
            • xargs -n 1 是避免xargs: Argument list too long 错误的另一种选择;)
            【解决方案17】:

            您还可以根据需要使用“--exclude-tag”选项之一:

            • --exclude-tag=文件
            • --exclude-tag-all=文件
            • --exclude-tag-under=FILE

            托管指定文件的文件夹将被排除。

            【讨论】:

              【解决方案18】:

              将 find 命令与 tar append (-r) 选项结合使用。这样,您可以在一个步骤中将文件添加到现有的 tar,而不是通过两次解决方案(创建文件列表,创建 tar)。

              find /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} \;
              

              【讨论】:

                【解决方案19】:

                您可以使用 cpio(1) 创建 tar 文件。 cpio 将文件归档到 stdin 上,因此如果您已经确定了要用于选择归档文件的 find 命令,请将其通过管道传输到 cpio 以创建 tar 文件:

                find ... | cpio -o -H ustar | gzip -c > archive.tar.gz
                

                【讨论】:

                  【解决方案20】:

                  gnu tar v 1.26 --exclude 需要在存档文件和备份目录参数之后,不应该有前导或尾随斜杠,并且不喜欢引号(单引号或双引号)。所以相对于要备份的PARENT目录是:

                  tar cvfz /path_to/mytar.tgz ./dir_to_backup --exclude=some_path/to_exclude

                  【讨论】:

                  • 经过大量实验,我发现与tar (GNU tar) 1.28中的命令大致相同。
                  【解决方案21】:
                  tar -cvzf destination_folder source_folder -X /home/folder/excludes.txt
                  

                  -X 表示包含必须从备份中排除的文件名列表的文件。例如,您可以在此文件中指定 *~ 以在备份中不包含任何以 ~ 结尾的文件名。

                  【讨论】:

                  • 我认为,这是最好的解决方案,因为它甚至适用于那些排除数量很大的情况。也可以在选项包中包含 X 选项,所以最短的形式大概是:tar cXvfJ EXCLUDE-LIST ARCHIVE.tar.xz SOURCE-FOLDER
                  【解决方案22】:

                  看看

                  tar cvpzf zip_folder.tgz . --exclude=./public --exclude=./tmp --exclude=./log --exclude=fileName
                  

                  【讨论】:

                    【解决方案23】:

                    成功案例: 1)如果给出完整路径进行备份,则在排除中也应使用完整路径。

                    tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude='/opt/ABC/csv/' --exclude='/opt/ABC/log/ ' /opt/ABC

                    2) 如果给当前路径做备份,在 exclude 中也应该只使用当前路径。

                    tar -zcvf backup_27032020.tar.gz --exclude='ABC/csv/' --exclude='ABC/log/' ABC

                    失败案例:

                    1. 如果给当前路径目录进行备份和忽略完整路径,那么将不起作用

                      tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude='/opt/ABC/csv/' --exclude='/opt/ABC/log/ 'ABC

                    注意:在备份目录之前/之后提及排除是可以的。

                    【讨论】:

                      【解决方案24】:

                      最好的办法是通过 xargs 将 find 与 tar 一起使用(处理大量参数)。例如:

                      find / -print0 | xargs -0 tar cjf tarfile.tar.bz2
                      

                      【讨论】:

                      • 这可能会导致 tar 被多次调用 - 并且还会重复打包文件。正确的是:find / -print0 | tar -T- --null --no-recursive -cjf tarfile.tar.bz2
                      • 我在某处读到,当使用 xargs 时,应该使用 tar r 选项而不是 c,因为当 find 实际找到大量结果时,xargs 将拆分这些结果(基于在本地命令行参数限制上)成块并在每个部分上调用 tar。这将生成一个包含xargs 返回的最后一个块的存档,而不是find 命令找到的所有结果。
                      【解决方案25】:

                      可能是多余的答案,但因为我发现它很有用,所以它是:

                      虽然是 FreeBSD 根目录(即使用 csh),但我想将整个根文件系统复制到 /mnt,但没有 /usr 和(显然)/mnt。这是有效的(我在 /):

                      tar --exclude ./usr --exclude ./mnt --create --file - . (cd /mnt && tar xvd -)
                      

                      我的全部观点是,有必要(通过放置 ./指定将被排除的目录在其中复制较大目录的一部分。

                      我的 0.02 欧元

                      【讨论】:

                        【解决方案26】:

                        我没有运气让 tar 排除几个级别深的 5 GB 子目录。最后,我只是使用了 unix Zip 命令。它对我来说更容易。

                        因此对于原始帖子中的这个特定示例
                        (tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .)

                        相当于:

                        zip -r /backup/filename.zip 。 -x 上传/文件夹/**\* 上传/文件夹2/**\*

                        (注意:这是我最初使用的帖子 https://superuser.com/questions/312301/unix-zip-directory-but-excluded-specific-subdirectories-and-everything-within-t

                        【讨论】:

                        • 注意:zip 不会打包空目录,但 tar 会!
                        【解决方案27】:

                        我想在本地主机上拥有新的前端版本(角度文件夹)。 另外,在我的情况下, git 文件夹很大,我想排除它。 我需要从服务器下载它,然后解压它才能运行应用程序。

                        从 /var/lib/tomcat7/webapps 压缩 angular 文件夹,将其移动到名称为 angular.23.12.19.tar.gz 的 /tmp 文件夹

                        命令:

                        tar --exclude='.git' -zcvf /tmp/angular.23.12.19.tar.gz /var/lib/tomcat7/webapps/angular/
                        

                        【讨论】:

                          【解决方案28】:

                          以下 bash 脚本应该可以解决问题。它使用了 Marcus Sundman 给出的here 的答案。

                          #!/bin/bash
                          
                          echo -n "Please enter the name of the tar file you wish to create with out extension "
                          read nam
                          
                          echo -n "Please enter the path to the directories to tar "
                          read pathin
                          
                          echo tar -czvf $nam.tar.gz
                          excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs`
                          echo $pathin
                          
                          echo tar -czvf $nam.tar.gz $excludes $pathin
                          

                          这将打印出您需要的命令,您可以将其复制并粘贴回去。可能有一种更优雅的方式可以直接将其提供给命令行。

                          只需将 *.CC 更改为您想要排除的任何其他常见扩展名、文件名或正则表达式,这应该仍然有效。

                          编辑

                          只是补充一点解释; find 生成与所选正则表达式匹配的文件列表(在本例中为 *.CC)。该列表通过 xargs 传递给 echo 命令。这将打印 --exclude '列表中的一个条目'。斜线 () 是 ' 标记的转义字符。

                          【讨论】:

                          • 要求交互式输入对于大多数 shell 脚本来说是一个糟糕的设计选择。改为读取命令行参数,您将受益于 shell 的选项卡完成、历史完成、历史编辑等。
                          • 此外,您的脚本不适用于包含空格或 shell 元字符的路径。您应该基本上总是将变量放在双引号中,除非您特别要求 shell 执行空格标记化和通配符扩展。详情请见stackoverflow.com/questions/10067266/…
                          猜你喜欢
                          • 2013-08-02
                          • 2013-04-25
                          • 2015-03-10
                          • 1970-01-01
                          • 2017-05-28
                          • 2021-12-26
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多