Portál AbcLinuxu, 5. května 2025 16:19

Dotaz: bash - kopírování a přejmenování souborů

21.1.2008 23:18 motorcb | skóre: 12
bash - kopírování a přejmenování souborů
Přečteno: 3500×
Odpovědět | Admin
Zdravim.
Mam slozku kde je nekolik tisic souboru, ktere jsou libovolne pojmenovane.Predevsim je u nich libovolna velikost pismen a vsechny maji koncovku .txt
Ja bych je potreboval zkopirovat do samostatne slozky2, kde budou bez koncovky .txt a jejich nazev budou tvorit pouze mala pismena. Dokazal by to nekdo?
Ja uz se s tim peru 2 dny a nemohu to vyresit :(
Predem diky za jakykoliv napad :)
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

kozzi avatar 21.1.2008 23:22 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
a co krename
Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
Dalibor Smolík avatar 21.1.2008 23:29 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
mmv "puvodni*" "novy#1"
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
21.1.2008 23:47 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
man tr
man sed
21.1.2008 23:51 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
1. v MidnightCommander označiť všetky súbory

2. ako výstupný adresár treba nastaviť /cesta/k/slozka2/\L*

3. zdrojová maska bude *.[Tt][Xx][Tt] (musia byt povolené shell vzory)

4. stlačiť OK :)
21.1.2008 23:56 ajikdpoe | skóre: 23 | blog: dvh
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
#!/bin/bash
ZDROJ=`pwd`
CIEL='/home/dvh/pokus'
mkdir $CIEL
for i in *.txt; do
  echo "Kopirujem $i"
  cp "$ZDROJ/$i" "$CIEL/`echo $i | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`"
done
(aneb: Ked jediny nastroj co mas je kladivo, vsetko vyzera ako kliniec :) premennu CIEL si premenuj na to kam sa to ma kopirovat
21.1.2008 23:59 ajikdpoe | skóre: 23 | blog: dvh
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
zabudol som odrezat koncovku .txt, opravena verzia:
#!/bin/bash
ZDROJ=`pwd`
CIEL='/home/dvh/pokus'
mkdir $CIEL
for i in *.txt; do
  echo "Kopirujem $i"
  cp "$ZDROJ/$i" "$CIEL/`echo $i | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' | sed 's/.txt$//'`"
done
22.1.2008 02:12 Ondřej Kubečka | skóre: 29 | blog: datlovo | Ulm
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
No, možná bych zkusil tohle:
#!/bin/bash

# Inicializace promennych
AWK=/usr/bin/gawk

i=0

fail()
{
   echo "SELHANI: ${*}"
   exit 1
}

get_dst()
{
   SRC_NAME="${1}"
   DST_DIR="${2}"
   echo $* | $AWK -v src_name="${SRC_NAME}" -v dst_dir="${DST_DIR}" '
      BEGIN {
         dst_name=src_name
         sub(/\.txt$/,"",dst_name)
         sub(/.*\//,"",dst_name)
         print(dst_dir "/" tolower(dst_name))
      }'
}

# Zakladni kontrola smysluplnych parametru
[ "${#}" -lt "2" ] && fail "Prilis malo parametru."
[ -d "${!#}" ] || fail "\"${!#}\" neni adresarem."

while [ "${i}" -lt "$((${#} - 1))" ] ; do
   ((i++))
   if [ ! -f "${!i}" ] ; then
      echo "VAROVANI: \"${!i}\" neni souborem - vynechavam."
      continue
   fi
   cp -i "${!i}" "`get_dst "${!i}" "${!#}"`"
done
Jde to vylepšit (zjednodušit, přidat kontroly... mazanou koncovku ovládat z příkazové řádky... přepsat), ale jinak komentáře:

a) I takový malý nástroj může být príma, když ho jde krmit parametry z příkazové řádky.

b) trocha purismu... omezme roury (a forky). I ten sed, šel zavolat najednou:
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;s/\.txt$//'
c) (ne že by byl dobrý nápad je používat, ale) ten sed by si vylámal zuby na jménech souborů s diakritikou. Nehledě na to, že v tomto případě získává sed nízké hodnocení za estetický dojem. Tohle by navíc snad mělo běhat celkem na čemkoliv, kde je k dispozici bash a gawk nebo nawk (po malé úpravě). ;)
22.1.2008 00:02 marbu | skóre: 31 | blog: hromada | Brno
Rozbalit Rozbalit vše Re: bash - kopírování a přejmenování souborů
Odpovědět | | Sbalit | Link | Blokovat | Admin
třeba for i in *.txt; do cp $i adresar/`echo ${i%.txt} | tr '[:upper:]' '[:lower:]'`; done
There is no point in being so cool in a cold world.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.