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.

Rahul
la source
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
mnmnc
la source
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