• Reset your password

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log in
Hjem
Linuxin 2025

Breadcrumb

  • Hjem
  • forums
  • Script-hajer søges :-)

Hvad kan du med 100% sikkerhed sige, at du har stemt?

Resultater

1
0% (0 stemmer)
2
0% (0 stemmer)
Schrödinger
100% (1 stemme)
Antal stemmer: 1
Af mich | 16.04.2015 03:09

Script-hajer søges :-)

Programmering

Mit lille script til at checke om lokale filer også findes på de eksterne harddiske kan desværre ikke finde ud af filnavne med mellemrum. Det er jo en kedelig situation, så jeg håber, at en af jer script-hajer kan hjælpe mig med at finde det manglende " eller ;

Her er, hvad jeg anser for den væsentligste del af scriptet:



for l in $(find ./ -iname "$fn")

do

if (( ${#remote_disk} > 0 )); then

local_file="$l"

remote_file="$remote_dir${local_file:1}"

if [[ ! -e "$remote_file" ]]; then

echo "$local_file mangler på $remote_disk"

echo "$local_file" >> /tmp/missing.tmp

if [ "$L_only" = "false" ]; then

cp -pT $local_file $remote_file

fi

fi

fi

echo $(dirname $l) >> /tmp/rawfiles.tmp

done



du -ch $(cat /tmp/rawfiles.tmp | sort -u) >> "$dir_log"

rm -f /tmp/rawfiles.tmp

cat /tmp/missing.tmp | sort >> "$missing_log"

rm -f /tmp/missing.tmp



I mine tests er

"$fn" = "*"

$remote_disk og $remote_dir henviser til den eksterne disk.



Det hele fungerer perfekt, bortset fra at filnavne med mellemrum bliver klippet før mellemrummet i $missing_log.



Now is time for your woodoo, sharks!



Spørg endelig, hvis I mangler oplysninger.


  • Log in to post comments

Kommentarer20

10 år 1 måned siden

Permalink

Indsendt af johnnyec den 16. april 2015 kl. 10:59

Permalink

jeg er ingen haj men jeg vil

jeg er ingen haj men jeg vil tro du kan bruge



sort -t\n





har du ikke problemer med spaces i din



cp -pT $local_file $remote_file





det ville jeg i hvert fald have gættet på

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af dudsen den 16. april 2015 kl. 13:42

Permalink

sed

den svære men korrecte måde ville værre at rode med finds -print0 eller -fprint0 output formatering, den slags er jeg for doven til så her er et sed eksempel istedet.





find |sed 's/ /\\ /g' |xargs stat



jeg bruger en simpel søgning of piper til stat via xargs for lige at teste.

i dit exempel burde det virke hcis du ersttatter $(find ./ -iname "$fn") med $(find ./ -iname "$fn" | sed 's/ /\\ /g' )



Håber det hjælp dig nærmere til en løsning.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 16. april 2015 kl. 17:38

Permalink

Det hele fungerer

#0: Det hele fungerer perfekt, bortset fra at filnavne med mellemrum bliver klippet før mellemrummet i $missing_log.



Jeg er ikke vild med kombinationen af "for" og navne med mellemrum. Du må have kildet den under hagen (med IFS?) for at få ovenstående til at virke, eller?



Jeg tror while er bedre til formålet for den kører på linjeskift (ligesom output af find).





missing_log="missing.log"

touch $missing_log

rm $missing_log



find -iname "*.txt" | while read localFile

do

remoteFile="../remotedir/$localFile"

( [ ! -e "$remoteFile" ] && echo "$remoteFile does not exist" || echo "$remoteFile DOES exist" ) >> $missing_log

done


  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mich den 17. april 2015 kl. 02:03

Permalink

Tak for jeres input

Jeres input er værdsat og vil blive studeret nærmere.



Selv om det er lykkedes mig at lave nogle nyttige scripts i tidens løb, er jeg bestemt ingen ørn til bash scripting, som I sikkert kan se, og finder ofte syntaksen kontraintuitiv eller inkonsistent.



Som regel undgår jeg mellemrum i filnavne, men de sniger sig ind af og til alligevel, og i et script, der skal tage backup eller kontrollere, at den er korrekt, må man jo også tage højde for den mulighed.



#1:

cp -pT $local_file $remote_file

ville sikkert have givet problemer, som du skriver, med da jeg kørte alle tests med

L_only="true" # log only

blev cp aldrig udført.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af dudsen den 17. april 2015 kl. 21:14

Permalink

du er ikke den eneste

#4:

Selv om det er lykkedes mig at lave nogle nyttige scripts i tidens løb, er jeg bestemt ingen ørn til bash scripting, som I sikkert kan se, og finder ofte syntaksen kontraintuitiv eller inkonsistent.




du er ikke den eneste, Bash har sine problemer som script sprog især omkring whitespace hvor folk ofte tyr til sed, perl eller awk oneliners for fixe problemerne, og subshell er et kapitel for sig, det er nogle gange halvsvært self for erfarne brugere at holde snor i bash, men det giver dig en muglighed for at konvertere manuelt workflow til script uden at skifte syntax, eller lære formel programering.



#3: Jeg er ikke vild med kombinationen af "for" og navne med mellemrum. Du må have kildet den under hagen (med IFS?) for at få ovenstående til at virke, eller?

Det løser vel ikke rod problemet at mv cp, cat, echo, osv opdatter whitespace som seperator?

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 18. april 2015 kl. 01:38

Permalink

Det løser vel ikke rod

#5: Det løser vel ikke rod problemet at mv cp, cat, echo, osv opdatter whitespace som seperator?



echo er ligeglad med white-spaces - den skriver, det den bliver bedt om uanset whitespaces.



Derfor: Punkt 1 var at få (for/while) loop'en til at fungere. Hvis for-loopen ikke fungerer forklarer det jo også hvorfor echo til fil ikke fungerede for filnavne med mellemrum (som skrevet i #0).



I min erfaring kan man enten escape whitespaces eller omklamre hele stien med anførselstegn. Jeg foretrækker det sidste fordi den også er resisitent overfor andre specialkarakterer i filnavne - fx '-' ("minus").



Flg. har jeg lige testet og det virker for filer med mellemrum inkl. cp kommando:





missing_log="missing.log"

touch $missing_log

rm $missing_log

find -iname "*.txt" | while read localFile

do

remoteFile="../remotedir/$localFile"

( [ ! -e "$remoteFile" ] && echo "$remoteFile does not exist - copying.." && cp "$localFile" "$remoteFile" ) >> $missing_log



done


  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mich den 19. april 2015 kl. 02:55

Permalink

Tak igen

Tak igen for jeres kommentarer. Jeg vil, som tidligere nævnt, studere jeres guldkorn med interesse.

#5:

Tak for opbakningen. Det er rart at vide, at man ikke er den eneste.

Muligheden for at automatisere et ellers manuelt workflow er jo det centrale, men jeg har da sommetider overvejet, om ikke det var værd at prøve med et andet sprog.



#6:

Ja, jeg havde også tænkt på at prøve med anførselstegn, som jeg i andre sammenhænge har brugt flittigt og med held, men det er nok blevet ved tanken, eller også har jeg ikke testet det godt nok. Tak for at minde mig om det.



I øvrigt forstår jeg ikke meningen med



touch $missing_log

rm $missing_log


  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. april 2015 kl. 09:10

Permalink

Ja, jeg havde også

#7: Ja, jeg havde også tænkt på at prøve med anførselstegn, som jeg i andre sammenhænge har brugt flittigt og med held, men det er nok blevet ved tanken, eller også har jeg ikke testet det godt nok. Tak for at minde mig om det.



Det er beskrevet rigtig mange steder, og som nævnt fyldt med problematikker. Jeg skal gerne indrømme at jeg ikke gider selv.



https://www.google.dk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF…



#7: $missing



Så vidt jeg husker, at finde mapper/filer uden specificeret fil type i bash.



# remove old logs

if [ -f "$missing_log" ]; then

rm $missing_log

fi




Måske er det nemmere at løse det overordnede problem i f.eks. Python?

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 19. april 2015 kl. 17:44

Permalink

I øvrigt forstår jeg

#7: I øvrigt forstår jeg ikke meningen med..





touch $missing_log

rm $missing_log





Det var bare en hurtig (og doven) måde at slette den gamle log. Problemet var at rm giver en fejl, hvis filen ikke eksisterer. "touch" sikrer at der er en fil med det pågældende navn. Jeg kunne også have brugt rm -f. Eller tjekket for filens eksistens, som frogmaster gør i den bid kode, som han har snuppet fra Google (og lader som om han lige hiver frem fra hukommelsen - uden rigtig at forstå den) i #8.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. april 2015 kl. 18:48

Permalink

(og lader som om han

#9: (og lader som om han lige hiver frem fra hukommelsen - uden rigtig at forstå den)



Det er korrekt jeg ikke husker bash i detaljer, og at jeg søger på løsninger før jeg svarer. Også at jeg kan tage fejl, selv hvor jeg har min ekspertiser, men prøv for fanden at lade være med at opføre dig som en fucking psykopat.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 19. april 2015 kl. 21:02

Permalink

Beklager afsporing af tråd,

Beklager afsporing af tråd, mich :(



#10: Også at jeg kan tage fejl, selv hvor jeg har min ekspertiser, men prøv for fanden at lade være med at opføre dig som en fucking psykopat.



Wow. Hvem er mest mentalt belastet:

* ham, der, på et forum, hvor man optræder anonymt, prøver at lade som om han ved en helt masse om et emne, hvor han ikke aner en tøddel

* eller ham, der påpeger det?



Der er ikke noget i vejen med at google-søge og kopiere svaret, men lad nu vær med at forsøge at tillægge dine svar et troværdighedsniveau, som de ikke kan bære. Hvis du finder et svar, baseret på nogle termer, der tilfældigvis rammer samme emne, så skriv det for hulen da!



Skriv: "jeg ved ikke meget om emnet, men måske du kan bruge disse søge-resultater". Lad vær med at finde på en dækhistorie om at "du måske husker forkert, men det er vist noget i retning af....". Et "-f" check i bash har jo intet med at finde en fil at gøre. At du kan søge på "$missing_log" på google og så kopiere første forekomst: https://github.com/wyuka/kdesdk/blob/master/scripts/qt4/icons-kde3tokde… , der intet har med at finde filer at gøre, er jo for langt ude! Til din orientering: "$missing_log" er et variabelnavn (et vilkårligt valgt navn) og at du finder den på google er en ren tilfældighed, der intet har med mich's forespørgsel at gøre.



Det er problematisk, at du svarer på ting, du ikke ved noget om og samtidig forsøger at gøre dem troværdige, ved at lade som om du er ekspert. Du gør det igen og igen - så lad da vær!



Det næste bliver at du finder en løsning, der - mod forventning - sletter harddisken og gengiver den til en intetanende bruger, som kopierer den i den tro at du ved noget om det.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. april 2015 kl. 22:29

Permalink

Wow. Hvem er mest

#11: Wow. Hvem er mest mentalt belastet



Det er du uden tvivl. Denne gang høster du en klage for din opførsel.



#11: Det næste bliver at du finder en løsning, der - mod forventning - sletter harddisken og gengiver den til en intetanende bruger, som kopierer den i den tro at du ved noget om det.



Du har før optrådt psykopatisk. Nu stopper det ...

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 19. april 2015 kl. 23:18

Permalink

Denne gang høster du

#12: Denne gang høster du en klage for din opførsel



Tak. Passende med en klage på denne tråd. Dine udfald er langt under sidens niveau.



#12: Du har før optrådt psykopatisk



Så nu er du også ekspert i psykologi? Du er bekymrende fascineret af psykopatbegrebet. Jeg kan kun gisne om hvorfor.



#12: Nu stopper det



Sålænge jeg har adgang til denne side, har jeg tænkt mig at påtale når dine svar er latterlige - det skylder jeg de evt. uerfarnce brugere, der ikke selv kan vurdere det. Uanset, hvor meget du kommer til at hade det og hvilke ting, du kalder mig.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. april 2015 kl. 23:33

Permalink

Du skal bare tale

Du skal bare tale ordentligt. Men klagen er sendt. Jeg har ingen interesse i at gøre mere ud af det, og jeg respektere din viden, men der er grænser for hvad du kan tillade dig at knalde af. Du skal ikke fyre det pis af igen ...

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af mrbrown79 den 19. april 2015 kl. 23:35

Permalink

Du skal ikke fyre det

#14: Du skal ikke fyre det pis af igen



Igen: uanset, hvor grimt du taler, har du absolut ingen indflydelse på hvad jeg kommenterer.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af frogmaster den 19. april 2015 kl. 23:59

Permalink

Jeg har ingen interesse i

Jeg har ingen interesse i hvad du kommenterer, udover hvor jeg er involveret, men gør du det, så skal du fame tale i en acceptabel tone. Vi behøver ikke være enige, og har du ret, så vil jeg ende med at give dig ret, som jeg vil med alle andre.



Her går du bare over grænsen.

  • Log in to post comments

10 år 1 måned siden

Permalink

Indsendt af marlar den 20. april 2015 kl. 10:55

Permalink

Okay, stop venligst her!
I

Okay, stop venligst her!



I er begge kommet for langt ud. Frogmaster erkender et forbehold for koden ved at skrive "så vidt jeg husker" - om så hukommelsen er støttet af en googlesøgning er så noget andet som i mine øjne ikke er specielt relevant. Der er tit ting som er meget diffuse i min erindring som jeg derfor googler, men derfor kan det jo godt udgå fra hukommelsen. Frogmaster har hjulpet rigtigt mange mennesker herinde, om det sker via Google er irrelevant i mine øjne.



På den anden side er det ikke i orden at kalde en anden bruger"fucking psykopat". Det er ærligt talt under lavmålet og tjener intet formål. Der er intet psykopatisk i mrbrown79's opførsel iflg. min forståelse af diagnosen, men jeg lader nu psykiatere om at diagnosticere psykiske sygdomme. Man kan måske kalde det dårlig stil og manglende respekt at skrive som i #9, men lad os holde os væk fra kliniske diagnoser.



Tilbage til emnet, tak!

  • Log in to post comments

10 år siden

Permalink

Indsendt af linuxuser42 den 22. april 2015 kl. 10:38

Permalink

Hvad med en dry rsync? (kan

Hvad med en dry rsync? (kan evt. Googles :-) )

  • Log in to post comments

10 år siden

Permalink

Indsendt af marlar den 22. april 2015 kl. 10:51

Permalink

rsync er fantastisk godt til

rsync er fantastisk godt til backup, men som jeg forstår #0 så er det ikke sagen her. Han vil gerne tjekke om filer på den lokale maskine findes på backupdrevene, men det jo være i en hel anden mappestruktur, og så dur rsync jo ikke.



Men ellers er det da rigtigt at en rsync dry run er godt til at finde forskelle imellem mappestrukturer. Her gætter jeg bare på at strukturen ikke er ens.

  • Log in to post comments

10 år siden

Permalink

Indsendt af dudsen den 23. april 2015 kl. 18:52

Permalink

while

#6:

echo er ligeglad med white-spaces - den skriver, det den bliver bedt om uanset whitespaces.



Derfor: Punkt 1 var at få (for/while) loop'en til at fungere. Hvis for-loopen ikke fungerer forklarer det jo også hvorfor echo til fil ikke fungerede for filnavne med mellemrum (som skrevet i #0).



I min erfaring kan man enten escape whitespaces eller omklamre hele stien med anførselstegn. Jeg foretrækker det sidste fordi den også er resisitent overfor andre specialkarakterer i filnavne - fx '-' ("minus").




Jeg er lidt halvparanoid om altid at escape whitespaces men mest fordi jeg har brændt nællerne på det ofte nok. Og oftenst har løsningen for mig været regex(min go to maslow's hammer)



Interesant iøvrigt at while og for bruger forskellige item seperatorer den vil jeg huske til fremtidig brug.



edit: pga forumets whitespace problem ;-)

  • Log in to post comments

Svar søges

2 stk Jolla C2 sælges 0
Den er go 0
Vil du have et sikrere og mere privat internet? Du skal blot installere Vivaldi-browseren med Proton VPN understøttelse! 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

Det første forumindlæg efter installation af Forum-modulet 8
Test 1
Vanilla OS 12
Nye forum-indlæg viser sig kun 1 gang 1
Vil alle forumindlæg vise sig to gange 1
Hjælp til remote terminal vindue? 3
PCLinuxOS 19
Kan ikke boote på installation 24
80-20 reglen 1
Skærmlys fader ud på min bærbare 8
32 bit distro på max 700mb der stadig understøttes 26
Har vi nogen Linux konsulenter i Slagelse området? 3
Virkelig 7
gnome-software? 3
Archer T2U AC600 Wireless Dual Band USB Adapter 26
En farverig APT 3.0 udgivelse imponerer med sine nye funktioner 2
Unix's fødsel 2
Linux Mint 13
"Intet realistisk alternativ" - mig i r*ven 1
German state moving 30,000 PCs to LibreOffice 6

Copyright © 2025 Company Name - All rights reserved

Developed & Designed by Alaa Haddad