Я пытаюсь создать скрипт, который 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
Перл для спасения:
#!/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 '..';
}
}
Вы можете попробовать:
#!/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