如何使用文件名中的空格对最近的 n 个文件进行 tar 压缩?

dab*_*aba 3 bash tar

我正在尝试为folder文件夹中的每个目录创建一个脚本,只n压缩最新的文件。

但是,我在处理多个单词文件时遇到了问题。我需要一种方法将它们用引号括起来,以便tar命令知道每个文件是哪一个。

到目前为止,这是我的脚本:

#!/bin/bash

if [ ! -d ~/backup ]; then
    mkdir ~/backup
fi

cd ~/folder
for i in *; do
    if [ -d "$i" ]; then
        original=`pwd`
        cd $i
        echo tar zcf ~/backup/"$i".tar.gz "`ls -t | head -10`"
        cd $original
    fi
done
echo "Backup copied in $HOME/backup/"
exit 0 
Run Code Online (Sandbox Code Playgroud)

小智 6

xargs来救援!一种方法是使用 xargs 创建参数列表,但将每个文件放在引号内:

echo `ls -t1 | head -10 | xargs -I'{}' echo \"{}\"`
Run Code Online (Sandbox Code Playgroud)

xargs用于直接tar在追加模式 ( -r) 中调用然后在最后压缩它的其他选项(您不能在追加模式下创建压缩档案):

ls -t | head -10 | xargs -I'{}' tar -rvf ~/backup/"$i".tar '{}'
gzip ~/backup/"$i".tar
Run Code Online (Sandbox Code Playgroud)

第二种方法的优点是您可以更改10为任何其他数字,即使是非常高的数字,它仍然可以工作,而不会获得太长的参数列表。