如何tar最近的n个文件

时间:2014-04-06 12:48:34

标签: linux bash file shell directory

我正在尝试创建一个在文件夹文件夹中预先指示的脚本,只压缩n个最新文件。

但是,我遇到了多个word文件的问题。我需要一种方法将它们包装在引号中,以便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 

2 个答案:

答案 0 :(得分:1)

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

你可以简化:

[[ ! -d ~/backup ]] && mkdir ~/backup 

现在回答你的问题:

$ ls -t|head -10
file with spaces
file
test.txt
test
test.sh
$ lstFiles=""; while read; do lstFiles="$lstFiles \"$REPLY\""; done <<< "$(ls -t|head -10)"
$ echo $lstFiles
"file with spaces" "file" "test.txt" "test" "test.sh"

请参阅how to read a command output or file content with a loop in Bash以了解更多详情。

答案 1 :(得分:1)

如果你想坚持单行,有几种解决方法 - 最简单的可能是使用&#39; tr&#39;并为空格引入通配符:

echo tar zcf ~/backup/"$i".tar.gz " ls -t |头-10 | tr ' ' '?'"

-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 1_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 2_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 3_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 4_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 5_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 6_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 7_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 8_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 9_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 10_dummy.txt
-rw-rw-r-- 1 dale dale 35 Apr  6 09:11 test 11_dummy.txt  

$ tar cvf TEST.tar $(ls -t | head -5 | tr ' ' '?')
test 11_dummy.txt
test 10_dummy.txt
test 9_dummy.txt
test 8_dummy.txt
test 7_dummy.txt

另一种选择可能是重定向到文件,然后使用&#39; -T&#39;:

ls -t | head > /tmp/10tarfiles.txt 
echo tar zcf ~/backup/"$i".tar.gz -T /tmp/10tarfiles.txt"
rm /tmp/10tarfiles.txt