Comment puis-je copier des fichiers dans un dossier en fonction de la dernière édition du fichier? Disons que je veux copier tous mes fichiers que je dernière modification aujourd’hui de c: dans mon dossier bak . Comment puis-je y arriver?
Je sais qu'une commande de copie normale peut être faite comme ceci:
cp source destination
par exemple.
cp *.c bak
Aucune suggestion?
En utilisant find, les fichiers (et uniquement les fichiers) modifiés le dernier jour sont trouvés par:
find . -type f -mtime 1
afin que vous puissiez les copier avec
find . -type f -mtime 1 -exec cp {} bak/ \;
Signification : rechercher toutes les entités du répertoire en cours (.
), de type "fichier" (-type f
), modifié au moins dans 1 jour = (-mtime 1
, mais c'est subtil, suivez le lien pour en savoir plus), et pour chacun d'eux, exécutez la commande cp
suivie du nom du fichier qui correspond aux conditions précédentes et d'un littéral bak/
--- dans la clause exec
, le point-virgule de fermeture (échappé pour éviter que le shell ne la dévore) ferme la commande et signifie en outre que la commande doit être exécutée une fois pour chaque correspondance.
Notez que l’arborescence de répertoires sera aplatie dans le dossier bak/
. L’utilisation d’un format d’archive serait donc préférable.
Par exemple, il s’agit de mon script qui effectue une sauvegarde de tous les fichiers de mes répertoires de travail modifiés aujourd’hui et depuis deux jours dans des fichiers tar, puis les déplace vers mon répertoire Dropbox:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
il a besoin de zsh
parce que je suis paresseux et que je n'ai pas essayé de m'adapter à la structure de tableau de bash
, mais quelqu'un ici peut sûrement le faire (indice, indice) ...
Vous pouvez d’abord spécifier le dernier fichier que vous avez modifié dans votre dossier actuel avec la commande
ls -lt
Ou, vous voulez spécifier le dernier fichier auquel vous avez accès avec la commande
ls -ltu
Ensuite, vous pouvez copier le fichier avec la commande cp
. Pour copier plusieurs fichiers, voir this .