Comment copier une liste de fichiers d'un répertoire à un autre et modifier le nom du fichier de destination à la volée


-5

Pourriez-vous proposer un moyen de copier une liste de fichiers d'un répertoire à un autre.

Pendant la copie, le script doit mettre en majuscule la première lettre du nom de fichier et en minuscule toutes les autres lettres.


4
Demandez-vous de l'aide ou me demandez-vous de l'écrire pour vous?
Xyon

2
Peut-être devriez-vous nous montrer un code qui prouve que vous avez essayé de le résoudre et que vous n'y êtes pas parvenu.
BenjiWiebe

Réponses:


2

Pour votre considération:

for i in *;
do
    fletter=`echo $i| cut -b 1`;                 # FIRST LETTER
    rest=`echo $i | cut -b 2-`;                  # THE REST
    fletter=`echo $fletter | tr "[a-z]" "[A-Z]"`;# CAPITILIZE FIRST LETTER
    rest=`echo $rest | tr "[A-Z]" "[a-z]"`;      # LOWER CASE THE REST
    cp "$i" "/target/directory/$fletter$rest" ;  # COPY TO DESTINATION
done

Ici, * va s'étendre aux fichiers du répertoire en cours. Si vous voulez que cela soit limité à des dossiers seulement, considérez ce qui suit:

find . -type f -print0 | while IFS= read -r -d '' i; do
    # rest of the script
done

3
Pourquoi for i in $(ls) et pas for i in *?
slhck

@slhck J'ai utilisé ce formulaire pour lui permettre de comprendre comment étendre l'exemple de manière plus appropriée: \ls -p | grep -v "/" traiter uniquement les fichiers - pas les répertoires.
mnmnc

2
C'est une très mauvaise façon de traiter uniquement les fichiers et non les répertoires. Je vous déconseille de le faire, pour plusieurs raisons. Voir: mywiki.wooledge.org/BashFAQ/020 - dans votre exemple, vous devez également citer les variables afin de pouvoir gérer les fichiers avec des espaces ou des caractères globants dans leur nom.
slhck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.