script - copy file in multiple directories

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
gutza36
Beiträge: 277
Registriert: 15.07.2003 23:25:07
Wohnort: Dark Side of the Moon
Kontaktdaten:

script - copy file in multiple directories

Beitrag von gutza36 » 21.06.2004 16:31:14

Hi, ich will eine datei in alle unterverzeichnisse eines folders reinkopieren und das unter linux, wenn möglich mit einem bash script. Da ich mich damit noch nicht auskenne bitte ich Euch um Hilfe. Unter WinNT habe ich das mit einer cmd-datei hingekriegt:

Code: Alles auswählen

@echo off
setlocal

:: *** Directory to start in:
set RootDir=D:\test
:: *** File to be copied:
set CopyFile=D:\test\tmp\moooye

for /f in ('dir /s /b /a:d "%RootDir%"') do (
  mkdir sub1
  mkdir sub1/sub2
  call :process
)
goto leave

:process
set Sub=sub1/sub2
if not exist "%Sub%/%CopyFile%" copy "%CopyFile%" "%Sub%"
goto :eof

:leave
echo Done.
Vielen Dank im Voraus!
\\ unix Sys Admin: noun. [Info Tech] Persons who are interested in computer science and literature but understands neither.

lobo
Beiträge: 180
Registriert: 27.01.2002 21:48:08
Lizenz eigener Beiträge: GNU General Public License

Beitrag von lobo » 21.06.2004 16:57:06

Hi!

Folgende Zeile würde die Datei README in jedes Unterverzeichnis von /home kopieren (vorausgesetzt man hat Schreibzugriff ;-) ).

Code: Alles auswählen

find /home -type d -exec cp README {} \;
Gruss

Jochen

gutza36
Beiträge: 277
Registriert: 15.07.2003 23:25:07
Wohnort: Dark Side of the Moon
Kontaktdaten:

Beitrag von gutza36 » 21.06.2004 17:12:27

lobo hat geschrieben:Hi!
Folgende Zeile würde die Datei README in jedes Unterverzeichnis von /home kopieren (vorausgesetzt man hat Schreibzugriff ;-) ).
Hi Jochen,
vielen Dank für die schnelle Antwort. Leider darf diese Datei nicht in jeden Unterordner sondern NUR in die vorher angelegten Ordner/Unterordner kopiert werden. Wie ist das hinzukriegen?!
Danke
\\ unix Sys Admin: noun. [Info Tech] Persons who are interested in computer science and literature but understands neither.

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 21.06.2004 23:20:38

gutza36 hat geschrieben:Leider darf diese Datei nicht in jeden Unterordner sondern NUR in die vorher angelegten Ordner/Unterordner kopiert werden. Wie ist das hinzukriegen?!
Du meinst, du suchst ein Kommando welches weiss und sich gemerkt hat, was du unter "vorher angelegt" verstehst? Oder gibt es evtl. auch einen Bezugspunkt für "vorher"?

Bei dieser Problembeschreibung hilft dieser Hinweis:
man find
Gruß
ernohl

gutza36
Beiträge: 277
Registriert: 15.07.2003 23:25:07
Wohnort: Dark Side of the Moon
Kontaktdaten:

Beitrag von gutza36 » 21.06.2004 23:51:49

..folgendes soll das kleine bash script können:
im ordner BIGFOLDER soll in allen sich darin befindenden ordnern (d.h. BIGFOLDER/SUB1, BIGFOLDER/SUB2, BIGFOLDER/SUB3, etc ) folgenden ordner anlegen:
BIGFOLDER/SUB2/neuerOrdner
BIGFOLDER/SUB3/neuerOrdner
BIGFOLDER/SUB4/neuerOrdner
etc.
und anschliessend in "neuerOrdner" die datei "CopyFile.txt" reinkopieren.

Code: Alles auswählen

@echo OFF
setlocal
:: *** Directory to start in:
set RootDir=C:\BIGFOLDER
:: *** File to be copied:
set CopyFile=C:\BIGFOLDER\CopyFile.txt

FOR /F %%x IN ('dir /b /s /a:d "%RootDir%"') do (
  cd %%x
  mkdir neuerOrdner
  call :process
)
goto leave

:process
set Sub=neuerOrdner
if not exist "%Sub%/%CopyFile%" copy "%CopyFile%" "%Sub%"
goto :eof

:leave
echo Done.

Es ist bestimmt nicht schwer, doch bis das ich mir bash-scripting aneigne kann mir vielleicht jemand helfen (was natürlich ein grosser zeitlicher vorteil waere).
Vielen Dank.
\\ unix Sys Admin: noun. [Info Tech] Persons who are interested in computer science and literature but understands neither.

ernohl
Beiträge: 1248
Registriert: 04.07.2002 08:11:56
Wohnort: HL

Beitrag von ernohl » 22.06.2004 00:24:15

gutza36 hat geschrieben:..folgendes soll das kleine bash script können:
im ordner BIGFOLDER soll in allen sich darin befindenden ordnern (d.h. BIGFOLDER/SUB1, BIGFOLDER/SUB2, BIGFOLDER/SUB3, etc ) folgenden ordner anlegen:
BIGFOLDER/SUB2/neuerOrdner
BIGFOLDER/SUB3/neuerOrdner
BIGFOLDER/SUB4/neuerOrdner
etc.
und anschliessend in "neuerOrdner" die datei "CopyFile.txt" reinkopieren.

Code: Alles auswählen

cd BIGFOLDER
for i in `find . -type d -print`
do
mkdir $i/neuerOrdner
cp <irgendwo>/CopyFile.txt $i/neuerOrdner
done
So als ganz grober Denkanstoß.
Gruß
ernohl

gutza36
Beiträge: 277
Registriert: 15.07.2003 23:25:07
Wohnort: Dark Side of the Moon
Kontaktdaten:

Beitrag von gutza36 » 22.06.2004 11:15:39

ernohl hat geschrieben:..als ganz grober Denkanstoß.
Vielen Dank. Hat mir `ne Menge Arbeit erspart.
Es würde mich jedoch auch interessieren ob man das ganze auch für mehrere Rechner in einem Netz automatisieren kann. d.h. an jedem Rechner eines bestimmten Netzes soll dieses Prozedere aufgerufen werden (wenn möglich nicht über start/login-script)
\\ unix Sys Admin: noun. [Info Tech] Persons who are interested in computer science and literature but understands neither.

Antworten