|
View:
New views
8 Messages
—
Rating Filter:
Alert me
|
|
|
[OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameMoin Liste,
ich möchte die Datei- und Ordnernamen meiner Musiksammlung FAT-Kompatibel machen (Für MP3-Player). Ein ---------------------------------------\/ find ./ -name "*:*" -exec rename 'y/:$/''/' '{}' \; sollte die Doppelpunkte löschen, ändert aber gar nichts. Wie sage ich rename, das nicht zu ersetzen ist, sondern zu löschen ist? Also zu ersetzen durch gar nichts. Ein find ./ -name "*:*" -exec rename 'y/:$//' '{}' \; bringt auch nichts. find ./ -name "*:*" -exec rename 'y/:$/_/' '{}' \; ersetzt die Doppelpunkte durch Underscore, ok, das geht, das will ich aber nicht. Ich habe auch bemerkt, daß zuerst die Ordnernamen geändert werden und der Aufruf danach ins Leere läuft, da die Verzeichnisse nun schon die geänderten Namen tragen - das ist nicht tragisch: ein erneuter Aufruf erledigt dies dann. Danke im Voraus und Tschüss dirk -- -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameOn Thu, November 5, 2009 6:02 am, DIrk Wernien wrote:
> find ./ -name "*:*" -exec rename 'y/:$/''/' '{}' \; > > sollte die Doppelpunkte löschen, ändert aber gar nichts. > Wie sage ich rename, das nicht zu ersetzen ist, sondern zu löschen ist? > Also zu ersetzen durch gar nichts. > > Ein > find ./ -name "*:*" -exec rename 'y/:$//' '{}' \; > bringt auch nichts. > > > find ./ -name "*:*" -exec rename 'y/:$/_/' '{}' \; Sicher, dass da ein $ nach dem : stehen muß? Das würde doch nur funktionieren, wenn der : das letzte Zeichen ist, oder? Ich würde mal ein rename 'y/://' probieren. Aber ich kenne rename auch nicht und rate jetzt nur. > Ich habe auch bemerkt, daß zuerst die Ordnernamen geändert werden und > der Aufruf danach ins Leere läuft, da die Verzeichnisse nun schon die > geänderten Namen tragen - das ist nicht tragisch: ein erneuter Aufruf > erledigt dies dann. man find findet u.a.: -depth Process each directory's contents before the directory itself. The -delete action also implies -depth. regards, Christian -- :wq -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameAm Donnerstag, 5. November 2009 schrieb Christian Brabandt:
> Sicher, dass da ein $ nach dem : stehen muß? Das würde doch nur > funktionieren, wenn der : das letzte Zeichen ist, oder? Ich würde mal > ein rename 'y/://' probieren. Aber ich kenne rename auch nicht und > rate jetzt nur. Raten hilft nicht weiter - warten (auf einen Perl-Spezialisten) ist wohl besser ;-) find ./ -name "*:*" -exec rename 'y/://' '{}' \; Nein - leider nicht. Aber das $ scheint wirklich überflüssig - die Version mit der Ersetzung durch Underscore läuft auch ohne $. Die Manpage erklärt auch nicht wirklich etwas: Das y oder das s am Beginn, wofür ist das gut? > > regards, > Christian > -- > > :wq -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameHallo DIrk!
DIrk Wernien schrieb am Donnerstag, den 05. November 2009: > Am Donnerstag, 5. November 2009 schrieb Christian Brabandt: > > > Sicher, dass da ein $ nach dem : stehen muß? Das würde doch nur > > funktionieren, wenn der : das letzte Zeichen ist, oder? Ich würde mal > > ein rename 'y/://' probieren. Aber ich kenne rename auch nicht und > > rate jetzt nur. > > Raten hilft nicht weiter - warten (auf einen Perl-Spezialisten) ist wohl > besser ;-) Stimmt, also lesen wir mal die Doku (jetzt wird es aber fundiert ;)): perldoc perlop und suchen nach y\/ ,---- | y/SEARCHLIST/REPLACEMENTLIST/cds | | Transliterates all occurrences of the characters found in the search | list with the corresponding character in the replacement list. It | returns the number of characters replaced or deleted. If no string is | specified via the =~ or !~ operator, the $_ string is transliterated. | (The string specified with =~ must be a scalar variable, an array | element, a hash element, or an assignment to one of those, i.e., an | lvalue.) | | A character range may be specified with a hyphen, so "tr/A-J/0-9/" does | the same replacement as "tr/ACEGIBDFHJ/0246813579/". For sed devotees, | "y" is provided as a synonym for "tr". If the SEARCHLIST is delimited | by bracketing quotes, the REPLACEMENTLIST has its own pair of quotes, | which may or may not be bracketing quotes, e.g., "tr[A-Z][a-z]" or | "tr(+\-*/)/ABCD/". | | Note that "tr" does not do regular expression character classes such as | "\d" or "[:lower:]". The "tr" operator is not equivalent to the tr(1) | utility. If you want to map strings between lower/upper cases, see "lc" | in perlfunc and "uc" in perlfunc, and in general consider using the "s" | operator if you need regular expressions. | | Note also that the whole range idea is rather unportable between | character sets--and even within character sets they may cause results | you probably didn't expect. A sound principle is to use only ranges | that begin from and end at either alphabets of equal case (a-e, A-E), or | digits (0-4). Anything else is unsafe. If in doubt, spell out the | character sets in full. | | Options: | | c Complement the SEARCHLIST. | d Delete found but unreplaced characters. | s Squash duplicate replaced characters. | | If the "/c" modifier is specified, the SEARCHLIST character set is | complemented. If the "/d" modifier is specified, any characters | specified by SEARCHLIST not found in REPLACEMENTLIST are deleted. (Note | that this is slightly more flexible than the behavior of some tr | programs, which delete anything they find in the SEARCHLIST, period.) If | the "/s" modifier is specified, sequences of characters that were | transliterated to the same character are squashed down to a single | instance of the character. `---- also probieren wir jetzt: find ./ -name "*:*" -exec rename 'y/://d' '{}' \; Eine Alternative dazu wäre wohl mmv: while mmv '*:*' '#1#2'; do :; done > Die Manpage erklärt auch nicht wirklich etwas: > Das y oder das s am Beginn, wofür ist das gut? y kommt wohl ursprünglich von sed, wo es dem tr-Befehl entspricht. s wiederum steht für substitute. Grüße Christian -- :wq -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameAm Donnerstag, 5. November 2009 schrieb Christian Brabandt:
> Hallo DIrk! Hallo Christian, > also probieren wir jetzt: > find ./ -name "*:*" -exec rename 'y/://d' '{}' \; > > Eine Alternative dazu wäre wohl mmv: > > while mmv '*:*' '#1#2'; do :; done > vielen Dank - das war genau richtig. :-) Tschüss dirk -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameMoin,
da ist nun noch die Frage wie ich: ' und ` escapen/quoten kann? find ./ -name "*'*" -exec rename -v 'y/'/_/' '{}' \; geht ins Leere. Quote and Quote-like Operators in perldoc perlop begreife ich nicht. Ein q(') geht nicht: fatter.sh: line 19: syntax error near unexpected token `)' fatter.sh: line 19: `find ./ -name "*q(')*" -exec rename -v 'y/q(')/_/' '{}' \;' Ich steh' wie Ochs' vor'm Berg. Ich kann doch nicht 800 GB per Hand durchflöhen. Der Rest funktioniert prima und ist rasend schnell. (Ja, ich muß das Teil so oft aufrufen, bis keine Änderungen mehr nötig sind - das ist aber egal) Tschüss dirk -- Bei Bedarf einfach kopieren - spart das Heraussuchen der ganzen Sonderzeichen: fatter.sh: ===SNIP=== echo echo Make filenames FAT compatible echo # Muster für copy & paste #find ./ -name "**" -exec rename -v 'y///' '{}' \; #find ./ -name "*:*" -exec rename -v 'y/://d' '{}' \; # verbose # -v echo Satzzeichen + Auslassungen find ./ -name "*:*" -exec rename -v 'y/://d' '{}' \; find ./ -name "*?*" -exec rename -v 'y/?//d' '{}' \; find ./ -name "*¿*" -exec rename -v 'y/¿//d' '{}' \; find ./ -name "*;*" -exec rename -v 'y/;/_/' '{}' \; find ./ -name "*,*" -exec rename -v 'y/,/_/' '{}' \; find ./ -name "*&*" -exec rename -v 'y/&/And/' '{}' \; #find ./ -name "*q(')*" -exec rename -v 'y/q(')/_/' '{}' \; echo Klammern find ./ -name "*(*" -exec rename -v 'y/(/-/' '{}' \; find ./ -name "*)*" -exec rename -v 'y/)/-/' '{}' \; find ./ -name "*[*" -exec rename -v 'y/[/-/' '{}' \; find ./ -name "*]*" -exec rename -v 'y/]/-/' '{}' \; find ./ -name "*{*" -exec rename -v 'y/{/-/' '{}' \; find ./ -name "*}*" -exec rename -v 'y/}/-/' '{}' \; echo Deutsche Sonderzeichen find ./ -name "*ä*" -exec rename -v 'y/ä/ae/' '{}' \; find ./ -name "*Ä*" -exec rename -v 'y/Ä/Ae/' '{}' \; find ./ -name "*ö*" -exec rename -v 'y/ö/oe/' '{}' \; find ./ -name "*Ö*" -exec rename -v 'y/Ö/Oe/' '{}' \; find ./ -name "*ü*" -exec rename -v 'y/ü/ue/' '{}' \; find ./ -name "*Ü*" -exec rename -v 'y/Ü/Ue/' '{}' \; find ./ -name "*ß*" -exec rename -v 'y/ß/ss/' '{}' \; echo Sandinavische Sonderzeichen find ./ -name "*å*" -exec rename -v 'y/å/aa/' '{}' \; find ./ -name "*Å*" -exec rename -v 'y/Å/Aa/' '{}' \; find ./ -name "*ø*" -exec rename -v 'y/ø/oe/' '{}' \; find ./ -name "*Ø*" -exec rename -v 'y/Ø/Oe/' '{}' \; find ./ -name "*æ*" -exec rename -v 'y/æ/ae/' '{}' \; find ./ -name "*Æ*" -exec rename -v 'y/Æ/Ae/' '{}' \; find ./ -name "*ð*" -exec rename -v 'y/ð/d/' '{}' \; find ./ -name "*Ð*" -exec rename -v 'y/Ð/D/' '{}' \; echo Südeuropäische Sonderzeichen find ./ -name "*í*" -exec rename -v 'y/í//' '{}' \; find ./ -name "*Í*" -exec rename -v 'y/Í//' '{}' \; find ./ -name "*ñ*" -exec rename -v 'y/ñ//' '{}' \; find ./ -name "*Ñ*" -exec rename -v 'y/Ñ//' '{}' \; find ./ -name "*ò*" -exec rename -v 'y/ò//' '{}' \; find ./ -name "*Ó*" -exec rename -v 'y/Ó//' '{}' \; find ./ -name "*õ*" -exec rename -v 'y/õ//' '{}' \; find ./ -name "*Õ*" -exec rename -v 'y/Õ//' '{}' \; find ./ -name "*â*" -exec rename -v 'y/â/a/' '{}' \; find ./ -name "*Â*" -exec rename -v 'y/Â/A/' '{}' \; find ./ -name "*ô*" -exec rename -v 'y/ô/o/' '{}' \; find ./ -name "*Ô*" -exec rename -v 'y/Ô/O/' '{}' \; find ./ -name "*û*" -exec rename -v 'y/û/u/' '{}' \; find ./ -name "*Û*" -exec rename -v 'y/Û/U/' '{}' \; echo Französische Sonderzeichen find ./ -name "*à*" -exec rename -v 'y/à/a/' '{}' \; find ./ -name "*À*" -exec rename -v 'y/À/A/' '{}' \; find ./ -name "*á*" -exec rename -v 'y/á/a/' '{}' \; find ./ -name "*Á*" -exec rename -v 'y/Á/A/' '{}' \; find ./ -name "*ç*" -exec rename -v 'y/ç/c/' '{}' \; find ./ -name "*Ç*" -exec rename -v 'y/Ç/C/' '{}' \; find ./ -name "*è*" -exec rename -v 'y/è/e/' '{}' \; find ./ -name "*È*" -exec rename -v 'y/È/E/' '{}' \; find ./ -name "*é*" -exec rename -v 'y/é/e/' '{}' \; find ./ -name "*É*" -exec rename -v 'y/É/E/' '{}' \; find ./ -name "*ê*" -exec rename -v 'y/ê/e/' '{}' \; find ./ -name "*Ê*" -exec rename -v 'y/Ê/E/' '{}' \; ===SNIP=== -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
Re: [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameHi dirk,
> ' und ` escapen/quoten kann? Mit backslash, nehme ich an. Freundliche Grüße, Christoph -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
|
|
[SOLVED] [OT] perlexpr : Rekursive Entfernung einzelner Zeichen aus Datei- und Ordnernamen mit find & renameAm Samstag, 7. November 2009 schrieb DIrk Wernien:
> Moin, > da ist nun noch die Frage wie ich: > > ' > und > ` > escapen/quoten kann? Am Sonntag, 8. November 2009 schrieb Christoph Conrad: > Hallo dirk, > > So klappt es, als Beispiel: > > cc@~/tmp> touch "jjj'kkk" > cc@~/tmp> find ./ -name "*'*" > ./jjj'kkk > cc@~/tmp> find ./ -name "*'*" -exec rename -v "y/'/_/" '{}' \; > ./jjj'kkk renamed as ./jjj_kkk > > Freundliche Grüße, > Christoph Vielen Dank dirk -- -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an debian-user-german-REQUEST@... mit dem Subject "unsubscribe". Probleme? Mail an listmaster@... (engl) |
| Free embeddable forum powered by Nabble | Forum Help |