[linux shell] find file linux and copy them to
Moderator: (M) Mod.-Team Allgemein
[linux shell] find file linux and copy them to
Moin alle,
ich wollte gerne die gefundene Dateien in ein andere Ordner verschieben. wie geht es?
ich habe:
petryxa@petryxa:~/bla$ find . -name *.tex -type f
./blabla/bla1.tex
./blabla/bla/bla2.tex
./bla3bla/bla3.tex
ich wollte jetzt alle 3 Dateien bla1.tex bla2.tex und bla3.tex im Ordner "gefunden" verschieben!
petryxa@petryxa:~/bla$ find . -name *.tex -type f | cp * ~/gefunden
so naiv ist Linux leider nicht=)
vielen Dank
ich wollte gerne die gefundene Dateien in ein andere Ordner verschieben. wie geht es?
ich habe:
petryxa@petryxa:~/bla$ find . -name *.tex -type f
./blabla/bla1.tex
./blabla/bla/bla2.tex
./bla3bla/bla3.tex
ich wollte jetzt alle 3 Dateien bla1.tex bla2.tex und bla3.tex im Ordner "gefunden" verschieben!
petryxa@petryxa:~/bla$ find . -name *.tex -type f | cp * ~/gefunden
so naiv ist Linux leider nicht=)
vielen Dank
---------------------------------------
TUHH wächst Bib und Mensa leider nicht=(
and here blog for Russian sailors:)
http://community.livejournal.com/yachting_rus/
TUHH wächst Bib und Mensa leider nicht=(
and here blog for Russian sailors:)
http://community.livejournal.com/yachting_rus/
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
funktioniert mit xargs, -print0 (zur Sicherheit) und list marker {} hier ein Beispiel:
http://www.cyberciti.biz/faq/linux-unix ... s-utility/
http://www.cyberciti.biz/faq/linux-unix ... s-utility/
-- Chrząszcz brzmi w trzcinie w Szczebrzeszynie.
-- 好好学习,天天向上!
-- 好好学习,天天向上!
Könnte man auch mit einer for-Schleife machen (bash):
Prüfen:
Verschieben:
Prüfen:
Code: Alles auswählen
for i in $(find . -name '*.odt' -type f); do echo "$i"; done
Code: Alles auswählen
for i in $(find . -name '*.odt' -type f); do mv "$i" $TARGET; done
You should be studying.
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
@380kV
Interessant ist bei sowas immer was mit Leerzeichen im Namen passiert. Wird das da getrennt oder nicht ? Sonst kann man das zum Beispiel über Umdefinition von $IFS hinkriegen oder mit obskurer Bash-Syntax die ich immer vergesse.
Nebenbei, das Kopieren vieler Dateien aus unterschiedlichen Pfaden in ein Verzeichnis ist nicht ganz unkritisch. Namenskollisionen muß man entweder ganz ausschließlich oder irgendwie behandeln.
Interessant ist bei sowas immer was mit Leerzeichen im Namen passiert. Wird das da getrennt oder nicht ? Sonst kann man das zum Beispiel über Umdefinition von $IFS hinkriegen oder mit obskurer Bash-Syntax die ich immer vergesse.
Nebenbei, das Kopieren vieler Dateien aus unterschiedlichen Pfaden in ein Verzeichnis ist nicht ganz unkritisch. Namenskollisionen muß man entweder ganz ausschließlich oder irgendwie behandeln.
-- Chrząszcz brzmi w trzcinie w Szczebrzeszynie.
-- 好好学习,天天向上!
-- 好好学习,天天向上!
Das hängt von $IFS und Einstellungen deiner Shell ab, jaNightStalker hat geschrieben:@380kV
Interessant ist bei sowas immer was mit Leerzeichen im Namen passiert. Wird das da getrennt oder nicht ? Sonst kann man das zum Beispiel über Umdefinition von $IFS hinkriegen oder mit obskurer Bash-Syntax die ich immer vergesse.
Das sollte man natürlich auch beachten... vielleicht könnte man da noch was Obskures mit rsync und in/excludes bauen ^^
Nebenbei, das Kopieren vieler Dateien aus unterschiedlichen Pfaden in ein Verzeichnis ist nicht ganz unkritisch. Namenskollisionen muß man entweder ganz ausschließlich oder irgendwie behandeln.
You should be studying.
vielen Dank erstmal!
$ find . -name "*.bak" -print0 | xargs -0 -I {} mv {} ~/old.file
ist genau was ich gesucht habe.
statt "mv" kann mach auch "cp" usw.
zusätzliche Frage=)
wie kann man beim copieren/verschieben für die gleiche Dateien, dei Dateiname automatisch ändern.
zB
ich habe
./bla/blup1.tuhh
./bla2/blup1.tuhh
mache
$ find . -name "*.tuhh" -print0 | xargs -0 -I {} cp -vi {} ./tuhh
bekomme
:ls ./tuhh
:blup1.tuhh
gewünscht ist
:ls ./tuhh
:blup1.tuhh
blup1-001.tuhh
wie geht das?
$ find . -name "*.bak" -print0 | xargs -0 -I {} mv {} ~/old.file
ist genau was ich gesucht habe.
statt "mv" kann mach auch "cp" usw.
zusätzliche Frage=)
wie kann man beim copieren/verschieben für die gleiche Dateien, dei Dateiname automatisch ändern.
zB
ich habe
./bla/blup1.tuhh
./bla2/blup1.tuhh
mache
$ find . -name "*.tuhh" -print0 | xargs -0 -I {} cp -vi {} ./tuhh
bekomme
:ls ./tuhh
:blup1.tuhh
gewünscht ist
:ls ./tuhh
:blup1.tuhh
blup1-001.tuhh
wie geht das?
---------------------------------------
TUHH wächst Bib und Mensa leider nicht=(
and here blog for Russian sailors:)
http://community.livejournal.com/yachting_rus/
TUHH wächst Bib und Mensa leider nicht=(
and here blog for Russian sailors:)
http://community.livejournal.com/yachting_rus/
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
Wußte ich doch, das wird ein Problem für dich
Sorry, für die exakte Syntax müsste ich jetzt auch nachsehen, aber ich würds etwa so machen: Anstelle des cp/mv in obigem Befehl 'ne Schleife nehmen, welche als erstes prüft ob der Name schon existiert, dann bei Bedarf einen neuen anlegt wieder prüft usw. solange bis man 'nen Zielnamen hat den man benutzen kann und dann cp/mv. Zu Hause hab ich so ein ähnliches Beispiel ... wenn's bis dahin keiner genauer geschrieben hat, kann ich nochmal nachsehen.
Sorry, für die exakte Syntax müsste ich jetzt auch nachsehen, aber ich würds etwa so machen: Anstelle des cp/mv in obigem Befehl 'ne Schleife nehmen, welche als erstes prüft ob der Name schon existiert, dann bei Bedarf einen neuen anlegt wieder prüft usw. solange bis man 'nen Zielnamen hat den man benutzen kann und dann cp/mv. Zu Hause hab ich so ein ähnliches Beispiel ... wenn's bis dahin keiner genauer geschrieben hat, kann ich nochmal nachsehen.
-- Chrząszcz brzmi w trzcinie w Szczebrzeszynie.
-- 好好学习,天天向上!
-- 好好学习,天天向上!
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
Code: Alles auswählen
FILE="test"; BACKUP=$FILE; c=0; while [[ -e "$BACKUP" ]] ; do c=$(($c+1)); NR=$(printf %03d $c); BACKUP="${FILE}-${NR}"; done; echo $BACKUP
Es müsste auch in Bash gehen Hab mich bemüht es nicht "zsh-kompakt" zu machen.
-- Chrząszcz brzmi w trzcinie w Szczebrzeszynie.
-- 好好学习,天天向上!
-- 好好学习,天天向上!
bei so viel nerdigkeit auch nochmal meine bescheidene frage. habe ein paar compilations in folgender form (verzeichnisse)
blabla1
blabal2
...
blabla10
blabal11
..
blabla100
nun würde ich gerne die führenden nullen auffüllen, so dass nachher folgendes bei raus kommt:
blabla001
...
blabla100
any ideas?
blabla1
blabal2
...
blabla10
blabal11
..
blabla100
nun würde ich gerne die führenden nullen auffüllen, so dass nachher folgendes bei raus kommt:
blabla001
...
blabla100
any ideas?
- NightStalker
- TalkING. Champion
- Beiträge: 891
- Registriert: Mo, 21. Okt. 02, 20:40
- Wohnort: Downloadbereich
Code: Alles auswählen
name="t35t 34 2"; prefix=$(echo $name | sed 's:[0-9]*$::'); suffix=$(echo $name | grep -o '[0-9]*$'); echo "${prefix}$(printf %03d $suffix)"
-- Chrząszcz brzmi w trzcinie w Szczebrzeszynie.
-- 好好学习,天天向上!
-- 好好学习,天天向上!