Voici une possibilité qui prendra les fichiers extraits et les déplacera dans un sous-répertoire, nettoyant ainsi votre dossier principal.
#!/usr/bin/perl -w
use strict;
use Getopt::Long;
my $clean_folder = "clean";
my $DRY_RUN;
die "Usage: $0 [--dry] [--clean=dir-name]\n"
if ( !GetOptions("dry!" => \$DRY_RUN,
"clean=s" => \$clean_folder));
# Protect the 'clean_folder' string from shell substitution
$clean_folder =~ s/'/'\\''/g;
# Process the "tar tv" listing and output a shell script.
print "#!/bin/sh\n" if ( !$DRY_RUN );
while (<>)
{
chomp;
# Strip out permissions string and the directory entry from the 'tar' list
my $perms = substr($_, 0, 10);
my $dirent = substr($_, 48);
# Drop entries that are in subdirectories
next if ( $dirent =~ m:/.: );
# If we're in "dry run" mode, just list the permissions and the directory
# entries.
#
if ( $DRY_RUN )
{
print "$perms|$dirent\n";
next;
}
# Emit the shell code to clean up the folder
$dirent =~ s/'/'\\''/g;
print "mv -i '$dirent' '$clean_folder'/.\n";
}
Enregistrez ceci dans le fichier fix-tar.pl
et l'exécuter comme suit :
$ tar tvf myarchive.tar | perl fix-tar.pl --dry
Cela confirmera que votre tar
est comme la mienne. Vous devriez obtenir des résultats comme :
-rw-rw-r--|batch
-rw-rw-r--|book-report.png
-rwx------|CaseReports.png
-rw-rw-r--|caseTree.png
-rw-rw-r--|tree.png
drwxrwxr-x|sample/
Si cela semble correct, relancez l'opération de la manière suivante :
$ mkdir cleanup
$ tar tvf myarchive.tar | perl fix-tar.pl --clean=cleanup > fixup.sh
En fixup.sh
Les script seront les commandes script qui déplaceront les fichiers et répertoires de premier niveau dans un dossier "propre" (dans ce cas, le dossier appelé cleanup
). Jetez un coup d'œil à ce script pour confirmer que tout est kasher. Si c'est le cas, vous pouvez maintenant nettoyer le désordre avec :
$ sh fixup.sh
Je préfère ce type de nettoyage parce qu'il ne détruit rien qui ne soit déjà détruit par l'écrasement de ce fichier initial. tar xv
.
Remarque : si le résultat de la première simulation n'est pas satisfaisant, il est possible de modifier les chiffres dans les deux champs de saisie. substr
jusqu'à ce qu'ils soient corrects. Les $perms
n'est utilisée que pour la marche à blanc, de sorte que seule la variable $dirent
doit être correcte.
Autre chose : il se peut que vous ayez besoin d'utiliser la fonction tar
option --numeric-owner
si les noms d'utilisateurs et/ou de groupes dans le tar
l'énumération fait commencer les noms dans une colonne imprévisible.