Alla mappar kopieras vid cp -r inte bara den valda

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
di98mase
Inlägg: 2
Blev medlem: 19 okt 2007, 18:38

Alla mappar kopieras vid cp -r inte bara den valda

Inlägg av di98mase »

Jag behöver ett script som hittar en mapp på disken, kopierar mappen med dess innehåll (om den hittas) till ett annat ställe för vidare hantering. jag har skrivit följande script:

Kod: Markera allt

exec < $1

while read LINE; do

	var=`find . -name $LINE`
	
	if [ -z $var ]; then
	   echo "No match found"
	else
		echo "Found folder: " $var
		cp -r $var dest_folder
	fi
done
scriptet läser in mappens namn från en fil och söker sedan efter mappen mha "find". detta fungerar och varje gång jag hittar en mapp kopierar jag den mha "cp". MEN det är här mitt problem uppstår. cp kopierar alla mappar inte bara den mappen jag pekar ut i min $var.
Låt mig beskriva:
ponera att det finns 3 mappar på samma nivå, a, b, c
under b ligger mappen 1.
jag söker efter 1 med find och hittar således ./b/1
då jag kör:
cp -r ./b/1 dest_folder
kopieras ALLA mappar under dest_folder dvs under dest_folder ligger a, b och c mapparna, men det är ju bara b/1/ jag vill kopiera.
Varför blir det så här?

Om jag utlämnar "-r" så får jag varningen :
cp: omitting directory `/b/1`

Vad är felet?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Alla mappar kopieras vid cp -r inte bara den valda

Inlägg av Konservburk »

di98mase skrev:Låt mig beskriva:
ponera att det finns 3 mappar på samma nivå, a, b, c
under b ligger mappen 1.
jag söker efter 1 med find och hittar således ./b/1
Jag följer din beskrivning på detta sätt:

Kod: Markera allt

$ mkdir di98mase
$ cd di98mase
$ mkdir a b c b/1
$ find . -name 1
./b/1
Inga konstigheter ännu.
di98mase skrev:då jag kör:
cp -r ./b/1 dest_folder
kopieras ALLA mappar under dest_folder dvs under dest_folder ligger a, b och c mapparna, men det är ju bara b/1/ jag vill kopiera.
Här tillåter jag mig att sväva ut lite. Först skapar jag dest_folder så att det finns en plats att kopiera till. Sedan använder jag hela sökvägen till cp för att försäkra mig om att inget alias eller liknande används istället. Dessutom lägger jag till flaggan -v för att se vad som kopieras. Slutligen kör jag för säkerhets skull ls -R för att se att det hela stämmer.

Kod: Markera allt

$ mkdir dest_folder
$ /bin/cp -v -r ./b/1 dest_folder
"./b/1" -> "dest_folder/1"
$ ls -R dest_folder
dest_folder:
1

dest_folder/1:
Det verkar stämma bra.
di98mase skrev:Varför blir det så här?
För mig blir det inte så. Jag undrar om du verkligen har följt din egen beskrivning till punkt och pricka?
di98mase
Inlägg: 2
Blev medlem: 19 okt 2007, 18:38

Re: Alla mappar kopieras vid cp -r inte bara den valda

Inlägg av di98mase »

Hej, tack för ett bra och förklarande svar. Du har helt rätt, det stämmer, scriptet funkade. Jag måste erkänna att jag förvillade mig själv genom att använda rätt lika namn på mapparna. Skönt. cp -r funkar:).

En annan sak som jag upptäckt är att man bara får mappen '1' kopierad till dest_folder dvs:
"dest_folder/1"
. Hur ska jag göra om jag vill behålla sökvägen som jag får i find, dvs jag vill att mappstrukturen "hänger med" till dest_folder:
"source_folder/b/1"
"dest_folder/b/1"

?
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Alla mappar kopieras vid cp -r inte bara den valda

Inlägg av Konservburk »

di98mase skrev:En annan sak som jag upptäckt är att man bara får mappen '1' kopierad till dest_folder dvs:
"dest_folder/1"
. Hur ska jag göra om jag vill behålla sökvägen som jag får i find, dvs jag vill att mappstrukturen "hänger med" till dest_folder:
"source_folder/b/1"
"dest_folder/b/1"

?
Använd flaggan --parents i cp-kommandot.
Skriv svar

Återgå till "Terminalforum"