ajouter fndate pour dater les fichiers
This commit is contained in:
		
							parent
							
								
									8143452c1b
								
							
						
					
					
						commit
						9fe71b3e11
					
				
							
								
								
									
										227
									
								
								fndate
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										227
									
								
								fndate
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,227 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
			
		||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
 | 
			
		||||
urequire DEFAULTS
 | 
			
		||||
 | 
			
		||||
function display_help() {
 | 
			
		||||
    uecho "$scriptname: manipuler des noms de fichier pour les dater
 | 
			
		||||
 | 
			
		||||
USAGE
 | 
			
		||||
    $scriptname (FILE|DIR)s...
 | 
			
		||||
    $scriptname -k SRCs... [DESTDIR]
 | 
			
		||||
    $scriptname -m SRCs... [DESTDIR]
 | 
			
		||||
    $scriptname -c COMMAND [ARGs...]
 | 
			
		||||
 | 
			
		||||
OPTIONS
 | 
			
		||||
    --create-or-rename
 | 
			
		||||
        Créer un nouveau fichier (option -f) ou créer un nouveau répertoire
 | 
			
		||||
        (option -d), ou renommer un fichier existant sans le changer de
 | 
			
		||||
        répertoire. C'est l'option par défaut.
 | 
			
		||||
    -f, --create-file
 | 
			
		||||
        Créer un nouveau fichier. Cette option est ignorée si le fichier ou le
 | 
			
		||||
        répertoire spécifié existe. C'est la valeur par défaut
 | 
			
		||||
    -d, --create-dir
 | 
			
		||||
        Créer un nouveau répertoire. Cette option est ignorée si le fichier ou
 | 
			
		||||
        le répertoire spécifié existe.
 | 
			
		||||
    -k, --copy
 | 
			
		||||
        Copier le fichier SRC vers la destination DESTDIR qui vaut par défaut le
 | 
			
		||||
        répertoire courant si un seul fichier source est spécifié. Si plusieurs
 | 
			
		||||
        fichiers sources sont spécifiés, il faut absolument spécifier un
 | 
			
		||||
        répertoire destination. Dans la destination, les fichiers sont nommés
 | 
			
		||||
        avec la date en préfixe.
 | 
			
		||||
    -m, --move
 | 
			
		||||
        Déplacer le fichier SRC vers la destination DESTDIR qui vaut par défaut
 | 
			
		||||
        le répertoire courant si un seul fichier source est spécifié. Si
 | 
			
		||||
        plusieurs fichiers sources sont spécifiés, il faut absolument spécifier
 | 
			
		||||
        un répertoire destination. Dans la destination, les fichiers sont nommés
 | 
			
		||||
        avec la date en préfixe.
 | 
			
		||||
    -c, --cmd
 | 
			
		||||
        Les arguments sont une commande à lancer. Dans les argument, PLACEHOLDER
 | 
			
		||||
        est remplacé par la date. Si le PLACEHOLDER n'est trouvé dans aucun des
 | 
			
		||||
        arguments, alors ajouter la date à la fin de la commande. Par exemple,
 | 
			
		||||
        voici comment émuler l'option -k
 | 
			
		||||
            $scriptname -c cp src dest/~~
 | 
			
		||||
    -P, --placeholder PLACEHOLDER
 | 
			
		||||
        Dans le nom spécifié, remplacer PLACEHOLDER par la date. Par défaut,
 | 
			
		||||
        PLACEHOLDER vaut ~~. Si le nom spécifié ne contient pas le PLACEHOLDER,
 | 
			
		||||
        il est placé au début.
 | 
			
		||||
    -F, --format FORMAT
 | 
			
		||||
        Spécifier le format de la date à insérer dans le nom du fichier. Par
 | 
			
		||||
        défaut, FORMAT vaut 'YYMMDD-'
 | 
			
		||||
        Les formats valides sont:
 | 
			
		||||
            YYYY année sur 4 chiffres
 | 
			
		||||
            YY   année sur 2 chiffres
 | 
			
		||||
            MM   mois sur 2 chiffres
 | 
			
		||||
            DD   jour sur 2 chiffres
 | 
			
		||||
        Tous les autres caractères sont pris tels-quels"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function create() {
 | 
			
		||||
    case "$create" in
 | 
			
		||||
    file) touch "$1";;
 | 
			
		||||
    dir) mkdir -p "$1";;
 | 
			
		||||
    esac
 | 
			
		||||
}
 | 
			
		||||
function have_ph() {
 | 
			
		||||
    [[ "$1" == *"$placeholder"* ]]
 | 
			
		||||
}
 | 
			
		||||
function replace_ph() {
 | 
			
		||||
    awkrun ph="$placeholder" format="$format" autof:int="$autof" '
 | 
			
		||||
BEGIN {
 | 
			
		||||
  gsub(/%/, "%%", format)
 | 
			
		||||
  gsub(/YYYY/, "%Y", format)
 | 
			
		||||
  gsub(/YY/, "%y", format)
 | 
			
		||||
  gsub(/MM/, "%m", format)
 | 
			
		||||
  gsub(/DD/, "%d", format)
 | 
			
		||||
  date = strftime(format)
 | 
			
		||||
}
 | 
			
		||||
{
 | 
			
		||||
  if (index($0, "/") != 0) {
 | 
			
		||||
    match($0, /\/[^/]*$/)
 | 
			
		||||
    dir = substr($0, 1, RSTART)
 | 
			
		||||
    name = substr($0, RSTART + 1)
 | 
			
		||||
  } else {
 | 
			
		||||
    dir = ""
 | 
			
		||||
    name = $0
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (autof) {
 | 
			
		||||
    pos = index(name, ph)
 | 
			
		||||
    if (pos == 0) {
 | 
			
		||||
      print dir date "-" name
 | 
			
		||||
    } else if (pos == 1) {
 | 
			
		||||
      print dir date "-" substr(name, length(ph) + 1)
 | 
			
		||||
    } else if (pos == length(name) - length(ph) + 1) {
 | 
			
		||||
      print dir substr(name, 1, length(name) - length(ph)) "-" date
 | 
			
		||||
    } else {
 | 
			
		||||
      print dir substr(name, 1, pos - 1) date substr(name, pos + length(ph))
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    pos = index(name, ph)
 | 
			
		||||
    if (pos == 0) {
 | 
			
		||||
      print dir date name
 | 
			
		||||
    } else {
 | 
			
		||||
      print dir substr(name, 1, pos - 1) date substr(name, pos + length(ph))
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}' <<<"$1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
action=create
 | 
			
		||||
create=
 | 
			
		||||
placeholder=
 | 
			
		||||
format=
 | 
			
		||||
parse_opts "${PRETTYOPTS[@]}" \
 | 
			
		||||
    --help '$exit_with display_help' \
 | 
			
		||||
    --create-or-rename action=create \
 | 
			
		||||
    -d,--create-dir create=dir \
 | 
			
		||||
    -f,--create-file create=file \
 | 
			
		||||
    -k,--copy action=copy \
 | 
			
		||||
    -m,--move action=move \
 | 
			
		||||
    -c,--cmd action=cmd \
 | 
			
		||||
    -P:,--placeholder: placeholder= \
 | 
			
		||||
    -F:,--format: format= \
 | 
			
		||||
    --autof autof=1 \
 | 
			
		||||
    @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
			
		||||
 | 
			
		||||
[ -n "$create" ] || create=file
 | 
			
		||||
[ -n "$placeholder" ] || placeholder="~~"
 | 
			
		||||
if [ -n "$format" ]; then
 | 
			
		||||
    autof=
 | 
			
		||||
else
 | 
			
		||||
    format=YYMMDD
 | 
			
		||||
    autof=1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$action" == cmd ]; then
 | 
			
		||||
    # Il faut lancer une commande spécifiée
 | 
			
		||||
    [ $# -gt 0 ] || set -- echo
 | 
			
		||||
    args=()
 | 
			
		||||
    found=
 | 
			
		||||
    for arg in "$@"; do
 | 
			
		||||
        if have_ph "$arg"; then
 | 
			
		||||
            check_interaction -c && evalx qvals "${args[@]}" "$arg" // estepi "Commande:"
 | 
			
		||||
            setx arg=replace_ph "$arg"
 | 
			
		||||
            read_value "Veuillez confirmer le nom" arg "$arg"
 | 
			
		||||
            found=1
 | 
			
		||||
        fi
 | 
			
		||||
        args=("${args[@]}" "$arg")
 | 
			
		||||
    done
 | 
			
		||||
    if [ -z "$found" ]; then
 | 
			
		||||
        setx arg=replace_ph
 | 
			
		||||
        read_value "Veuillez entrer le nom du fichier" arg "$arg"
 | 
			
		||||
        args=("${args[@]}" "$arg")
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if show_debug; then
 | 
			
		||||
        evalx qvals "${args[@]}" // edebug "Commande:"
 | 
			
		||||
        ask_yesno "Voulez-vous continuer?" X || die
 | 
			
		||||
    fi
 | 
			
		||||
    "${args[@]}"
 | 
			
		||||
 | 
			
		||||
elif [ "$action" == copy -o "$action" == move ]; then
 | 
			
		||||
    if [ $# -eq 0 ]; then
 | 
			
		||||
        die "Vous devez spécifier les fichiers"
 | 
			
		||||
    elif [ $# -eq 1 ]; then
 | 
			
		||||
        src="$1"
 | 
			
		||||
        destdir=.
 | 
			
		||||
        srcs=("$src")
 | 
			
		||||
    else
 | 
			
		||||
        args=("$@")
 | 
			
		||||
        setx destdir=last_value args
 | 
			
		||||
        array_copy_firsts srcs args
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -d "$destdir" ]; then
 | 
			
		||||
        ewarn "$destdir: répertoire introuvable"
 | 
			
		||||
        ask_yesno "Voulez-vous le créer?" X || die
 | 
			
		||||
        mkdir -p "$destdir" || die
 | 
			
		||||
    fi
 | 
			
		||||
    if [ "$action" == copy ]; then
 | 
			
		||||
        cmdinfo="Copie"
 | 
			
		||||
        cmd=(cp -i)
 | 
			
		||||
    elif [ "$action" == move ]; then
 | 
			
		||||
        cmdinfo="Déplacement"
 | 
			
		||||
        cmd=(mv -i)
 | 
			
		||||
    fi
 | 
			
		||||
    for src in "${srcs[@]}"; do
 | 
			
		||||
        setx srcname=basename -- "$src"
 | 
			
		||||
        if [ -e "$src" ]; then
 | 
			
		||||
            einfo "$cmdinfo de $(ppath "$src")"
 | 
			
		||||
            setx destname=replace_ph "$srcname"
 | 
			
		||||
            read_value "Veuillez confirmer le nom" destname "$destname"
 | 
			
		||||
            "${cmd[@]}" "$src" "$destdir/$destname"
 | 
			
		||||
        else
 | 
			
		||||
            ewarn "$src: fichier introuvable"
 | 
			
		||||
        fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
elif [ "$action" == create ]; then
 | 
			
		||||
    if [ $# -gt 0 ]; then
 | 
			
		||||
        for src in "$@"; do
 | 
			
		||||
            setx dir=dirname -- "$src"
 | 
			
		||||
            setx srcname=basename -- "$src"
 | 
			
		||||
            if [ -e "$src" ]; then
 | 
			
		||||
                einfo "Renommage de $(ppath "$src")"
 | 
			
		||||
                setx destname=replace_ph "$srcname"
 | 
			
		||||
                read_value "Veuillez confirmer le nom" destname "$destname"
 | 
			
		||||
                mv -i "$src" "$dir/$destname"
 | 
			
		||||
            else
 | 
			
		||||
                einfo "Création de $(ppath "$src")"
 | 
			
		||||
                setx destname=replace_ph "$srcname"
 | 
			
		||||
                read_value "Veuillez confirmer le nom" destname "$destname"
 | 
			
		||||
                create "$dir/$destname"
 | 
			
		||||
            fi
 | 
			
		||||
        done
 | 
			
		||||
    else
 | 
			
		||||
        case "$create" in
 | 
			
		||||
        file) einfo "Création d'un nouveau fichier";;
 | 
			
		||||
        dir) einfo "Création d'un nouveau répertoire";;
 | 
			
		||||
        esac
 | 
			
		||||
        setx destname=replace_ph
 | 
			
		||||
        read_value "Veuillez entrer le nom" destname "$destname"
 | 
			
		||||
        create "$destname"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
    die "$action: action non implémentée"
 | 
			
		||||
fi
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user