find -> erweiterungen beim kopieren ändern?

  • Morgen


    Kann man irgend wie mit find beim kopieren, die Erweiterungen onthefly manipulieren?


    Code
    shell> mkdir -p /tmp/test
    shell> touch /tmp/test{0,1,2,3}.sample
    shell> find /tmp -name test*.sample -exec cp -v {} /tmp/test \;
    `/tmp/test2.sample' -> `/tmp/test/test2.sample'
    `/tmp/test1.sample' -> `/tmp/test/test1.sample'
    `/tmp/test3.sample' -> `/tmp/test/test3.sample'
    `/tmp/test0.sample' -> `/tmp/test/test0.sample'


    So.


    Code
    `/tmp/test2.sample' -> `/tmp/test/test2.conf'
    `/tmp/test1.sample' -> `/tmp/test/test1.conf'
    `/tmp/test3.sample' -> `/tmp/test/test3.conf'
    `/tmp/test0.sample' -> `/tmp/test/test0.conf'


    Und.


    Code
    `/tmp/test2.sample' -> `/tmp/test/test2'
    `/tmp/test1.sample' -> `/tmp/test/test1'
    `/tmp/test3.sample' -> `/tmp/test/test3'
    `/tmp/test0.sample' -> `/tmp/test/test0'



    Geht das überhaupt (ohne pipe, sed, schleifen e.t.c geraffel, halt sauber innerhalb von find)


    MFG Ronny

  • Nur mit find geht das imho nicht, da find keine Möglichkeit bietet, an den Dateinamen Ersetzungsfunktionen anzuwenden. Die folgende Lösung kommt immerhin mit bash und find aus:


    Code
    while read file ; do 
      cp -v $file /tmp/test/${file/%.sample/.conf}
    done < <(find /tmp -name test*.sample)


    Gruß,


    Udo

  • So geht's:



    1020# ls
    . ..
    1021# touch mh.sample mh1.sample mh2.sample mh3.sample
    1022# ls
    . .. mh.sample mh1.sample mh2.sample mh3.sample
    1023# find . -name "mh*.sample" -exec mv '{}' '{}.txt' \;
    1024# ls
    . .. mh.sample.txt mh1.sample.txt mh2.sample.txt mh3.sample.txt
    1025#



    Gruß
    Manni

  • Danke


    mannih


    Das wäre für ein Erweiterung (auch nicht gewußt, kann man sicher mal gebrauchen) .


    Für eine Manipulation, gibt es echt keine Lösung, schade das wäre das was find komplett machen würde.


    MFG Ronny

  • Geht wie folgt:

    Code
    $ find /tmp -name 'test*.sample' -exec sh -c 'cp -v {} /tmp/test/$(basename {} .sample).conf' \;
    `/tmp/test0.sample' -> `/tmp/test/test0.conf'
    `/tmp/test1.sample' -> `/tmp/test/test1.conf'
    `/tmp/test2.sample' -> `/tmp/test/test2.conf'
    `/tmp/test3.sample' -> `/tmp/test/test3.conf'


    bzw.

    Code
    $ find /tmp -name 'test*.sample' -exec sh -c 'cp -v {} /tmp/test/$(basename {} .sample)' \;
    `/tmp/test0.sample' -> `/tmp/test/test0'
    `/tmp/test1.sample' -> `/tmp/test/test1'
    `/tmp/test2.sample' -> `/tmp/test/test2'
    `/tmp/test3.sample' -> `/tmp/test/test3'

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!