Как смонтировать n самых последних файлов с пробелами в имени файла?

Я пытаюсь создать скрипт, который foreach directoy в папке 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 
1
задан 7 April 2014 в 07:28

3 ответа

Перл для спасения:

#!/usr/bin/perl
use warnings;
use strict;

my $backup = $ENV{HOME} . '/backup';
my $folder = $ENV{HOME} . '/folder';

-d $backup or mkdir $backup or die $!;
chdir $folder or die $!;
while (my $node = glob '*') {
    if (-d $node) {
        chdir $node;
        my @files = sort { -M $a <=> -M $b } glob '*';  # Sort files by age.
        @files = @files[0 .. 9] if @files > 10;         # Keep only the newest 10.
        system 'tar', 'zcf', "$backup/$node.tar.gz", @files;
        chdir '..';
    }
}
1
ответ дан 24 May 2018 в 09:46
  • 1
    Тем не менее, это был спорный вопрос. Мне нужно сделать это в bash. – dabadaba 6 April 2014 в 18:02
  • 2
    @dabadaba: Всегда используйте правильный инструмент для задания shrug – choroba 7 April 2014 в 13:50
[F1]
1
ответ дан 24 May 2018 в 09:46

Вы можете попробовать:

#!/bin/bash

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

cd $HOME/folder
for i in *; do
    if [ -d "$i" ]; then
        tar -cf $HOME/backup/"$i".tar -T /dev/null #create an empty, uncompressed, archive
        cd "$i"
        ls -t | head -10 | while read file; do
            tar -rf $HOME/backup/"$i".tar "$file" #append $file to archive
        done
        gzip $HOME/backup/"$i".tar # compress the archive
        cd $OLDPWD
    fi
done
echo "Backup copied in $HOME/backup/"
exit 0 
1
ответ дан 24 May 2018 в 09:46
  • 1
    @dabadaba ОК, вы должны понять это, когда я добавлю свой ответ ... Я не использовал двойные двойные кавычки в своем ответе;) Теперь вы можете очистить свои комментарии, пожалуйста? – Radu Rădeanu 6 April 2014 в 19:36

Другие вопросы по тегам:

Похожие вопросы: