Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Είναι δωρεάν, είναι σταθερό, είναι γρήγορο.. ας το γνωρίσουμε και λίγο καλύτερα..

Συντονιστές: Super-Moderators, Software & Hardware Moderators

Απάντηση
Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από cdhyper » 04 Οκτ 2007 01:07

Πρέπει να αφαιρέσω μαζικά τα κενά (spaces) στα filenames ενός folder και να τα αντικαταστήσω με κάτω παύλες. Επίσης τον χαρακτήρα ' με τον χαρακτήρα -

Ποια είναι η εντολή μέσω κονσόλας; (CENTOS).
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

sibas
Honorary Member
Δημοσιεύσεις: 1851
Εγγραφή: 21 Φεβ 2003 01:21
Τοποθεσία: Μια εδώ.. Μια εκεί.. Σήμερα είμαι εδώ!!!
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από sibas » 04 Οκτ 2007 01:36

Η εντολή mv
#mv oldfile newfile
Για μαζικά δεν ξέρω, και για το ' - δεν το κατάλαβα :)

[edit]Ίσως να σε βοηθήσει αυτό http://www.debian-administration.org/articles/150[/edit]

Άβαταρ μέλους
tix-3-
Δημοσιεύσεις: 827
Εγγραφή: 25 Μαρ 2004 05:12
Τοποθεσία: Θεσσαλονικη-Καβαλα-βεροια(το τριγωνο της καταρας)
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από tix-3- » 04 Οκτ 2007 02:55

Αν δεν υπήρχανε οι κνίτες κι'η ηρωίνη...

Άβαταρ μέλους
RADICAL
Δημοσιεύσεις: 386
Εγγραφή: 14 Ιούλ 2004 01:07
Τοποθεσία: Athens
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από RADICAL » 04 Οκτ 2007 03:05

Πρέπει να φτιάξεις ένα shell script σάν και αυτό:

ξεκινάς: vim replacescript.sh

βάζεις μέσα αυτά:

Κώδικας: Επιλογή όλων

#!/bin/bash
if [ -n "$1" ]
then
  if [ -d "$1" ] 
  then
    cd "$1"
  else
    echo invalid directory
    exit
  fi
fi

for i in *
do
  OLDNAME="$i"
  NEWNAME=`echo "$i" | tr ' ' '_' | sed s/_-_/-/g`
  if [ "$NEWNAME" != "$OLDNAME" ]
  then
    TMPNAME="$i"_TMP 
    echo ""
    mv -v -- "$OLDNAME" "$TMPNAME"
    mv -v -- "$TMPNAME" "$NEWNAME"
  fi
  if [ -d "$NEWNAME" ] 
  then
    $0 "$NEWNAME"
  fi
done
το κάνεις executable

chmod +x replacescript.sh

και το τρέχεις

./replacescript.sh
Εικόνα

Άβαταρ μέλους
RADICAL
Δημοσιεύσεις: 386
Εγγραφή: 14 Ιούλ 2004 01:07
Τοποθεσία: Athens
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από RADICAL » 04 Οκτ 2007 03:20

όσο αφορά για τα quotes σε παύλες αλλάζωντας την γραμμή

Κώδικας: Επιλογή όλων

 NEWNAME=`echo "$i" | tr ' ' '_' | sed s/_-_/-/g` 
σε

Κώδικας: Επιλογή όλων

NEWNAME=`echo "$i" | tr ''\''' '-' | sed s/_-_/-/g` 
πρέπει να είσαι οκ.
Εικόνα

Άβαταρ μέλους
RADICAL
Δημοσιεύσεις: 386
Εγγραφή: 14 Ιούλ 2004 01:07
Τοποθεσία: Athens
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από RADICAL » 04 Οκτ 2007 03:23

...η απλά κάνεις αυτό που έδειξε ο tix-3- και μόλις είδα :)
Εικόνα

id12586
στις καρδιές μας
Δημοσιεύσεις: 8387
Εγγραφή: 23 Ιουν 2003 23:28
Τοποθεσία: Far away
Επικοινωνία:

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από id12586 » 04 Οκτ 2007 17:33

Ωραία scriptάκια σε αυτό το θέμα και έψαχνα κάτι ανάλογο. :)

Thank you! :victory:
Chris at your Services
ΕικόναSacame de Aqui

Άβαταρ μέλους
nske
Δημοσιεύσεις: 381
Εγγραφή: 15 Νοέμ 2002 03:39
Τοποθεσία: Αθήνα

Μαζική μετονομασία αρχείων σε SSH κονσόλα (linux)

Δημοσίευση από nske » 05 Οκτ 2007 19:11

Και ένα script που μετονομάζει αναδρομικά τα αρχεία με συγκεκριμένη κατάληξη στο όνομα του άμεσα μητρικού τους καταλόγου (αντικαθιστόντας τα κενα με "_") + έναν αύξοντα αριθμό. Λίγο άσχετο με το αρχικό θέμα, αλλά και λίγο σχετικό με τον τίτλο του.

Κώδικας: Επιλογή όλων

#!/usr/bin/ruby
require 'find'

def prefix(counter, digits="4", prefix_char="0")
        @counter = counter.to_s
        @digits = digits
        prefix_length = (digits.to_i - counter.length.to_i).to_i
        final_prefix = prefix_char*prefix_length + counter
                return final_prefix.to_s
end


def     conditions(file, extension)
        @file = file
        @extension = extension
        if File.file?(file) && File.extname(file).downcase==extension
                return "true"
        end
end

puts "Αρχικός κατάλογος:"
root_dir = File.expand_path(gets.chop)
puts "Κατάληξη:"
extension = gets.chop

Find.find(root_dir) { |entry|
        if File.directory?(entry)
                Dir.chdir(entry)
counter = 0
puts "\e[32m+ \e[0m[ \e[32m" + Dir.pwd + "\e[0m ] \n"
                Dir.foreach(Dir.pwd) { |file| if conditions(file, extension)=="true"
                        final_prefix = prefix(counter.to_s)
                        tmp_name = File.basename(Dir.pwd) + "-" + final_prefix + extension + ".tmp"
                        tmp_name_stripped = tmp_name.gsub("\s", "_")
                       File.rename(file, tmp_name_stripped)
                        puts "\t\e[32m |-\e[0m" + file + " ====> " + tmp_name_stripped + "\t [\e[32m OK \e[0m]\n"
                        new_name = File.basename(Dir.pwd) + "-" + final_prefix + extension
                        new_name_stripped = new_name.gsub("\s", "_")
                        File.rename(tmp_name_stripped, new_name_stripped)

counter += 1

        end }
        end 
ΥΣ. Είναι εντελώς προχειρογραμμένο (=> ενδεχομένως buggy) και δεν έχει error handling. Backup...

Απάντηση

Επιστροφή στο “Linux Guide”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης