Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

mv (if file exist)

Hej!

Jag har ett bekymmer med kommandot "mv" och jag undrar om någon eventuellt har något tips.

Jag har ju satt upp en FTP-server på jobbet och vi har några (fyra) klienter som lämnar filer på den.
Sedan finns det en användare (Decapus) som hämtar filerna från FTP-servern.
Jag har lagt upp cronjobb (cron.hourly) som en gång i timmen kollar om det finns några filer och om det finns så flyttar han filerna till Decapus.

Ett av cronjobben ser ut så här
mv /var/ftp/inexchange/*.xml  /home/decapus/inexchange

Men när det inte finns någon fil så lämnar systemet ett felmeddelande till
 "/var/spool/mail/root"

Det kan stå så här:

mv: cannot stat `/var/ftp/inexchange/*.xml': No such file or directory.

som sagt det fungerar perfekt men jag tycker att det är onödigt att han skriver felmeddelande varje timme, varje dag året runt.
Det borde gå att lägga in något villkor (if file exist)
Men jag har inte hittat något som funkar.

Jag kör centos 6.4 på servern.
Finns det något som har ett bra tips?

MVH Sven Darwall

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

FoHs bild

Om du inte vill ha några meddelanden alls så kan du lägga på > /dev/null 2>&1 i slutet av kommandot. Detta innebär att alla meddelanden skickas till /dev/null (dvs visas och loggas ej).

mv /var/ftp/inexchange/*.xml  /home/decapus/inexchange > /dev/null 2>&1

(Vill du bara försöka flytta filen om den finns så får du nog testa med lite bash-script, men det blir väl lite bökigt i och med att du har jokertecknet * med.)

Edit: Om du bara vill skicka felmeddelande till /dev/null tror jag det görs med

mv /var/ftp/inexchange/*.xml  /home/decapus/inexchange 2> /dev/null

Edit2: Testade att göra ett litet script som jag tror jag funka:

#!/bin/bash
FILER="$(ls /var/ftp/inexchange/*.xml 2> /dev/null)"
if [ $? -eq 0 ]
then
        for i in "$FILER"; do
                mv $i /home/decapus/inexchange
        done
fi

Det listar alltså alla xml-filer i /var/ftp/inexchange. Om dessa inte finns så kommer $?-variabeln att vara icke-noll och då utförs inte mv-kommandona på de icke-existerande filerna (och felmeddelande från ls skickas till /dev/null). Finns det filer så gås de igenom och flyttas en och en till /home/decapus/inexchange.

darwalls bild

STORT TACK för det uttömmande svaret.

Jag ska testa om det funkar under dagen.

Det andra alternativet att bara flytta filen om den finns, känns lite proffsigare än att eliminera felmeddelandet. så det ska jag testa först

Tack än en gång, jag åkerkommer när jag testat.

MVH Sven Darwalll

The best things in life is free

darwalls bild

Hej FoH!

Tyvärr funkar det inte.

Jag får felmeddelande: " /bin/bash^M: felaktig tolk: Filen eller katalogen finns inte "

Jag ska testa något av de enklare alternativen ( 2> /dev/null )

MVH Sven Darwall

The best things in life is free

Du har nog skrivit skriptet i windows och därför fått ^M som radbrytning.

Kör skriptet genom nedanstårnde kommando för att tabort windows radbrytning (vagnretur).

cat filnamn | tr -d "\r" > nytt_filnamn

 

darwalls bild

Hej Nille!

Ditt trix att ta bort Windows-radbrytningen fungerar!

Jag upptäckte också att de syns inte i vim, men i Midnight-Commanders editor så syns de.

Och när man ser radbrytningarna (uppil + M ) så är det ju enkelt att ta bort dem Smile

Tack för hjälpen!

MVH Sven Darwall

 

The best things in life is free

darwalls bild

Hej FoH!

Nu fungerar ditt script!

Jag hade problem med osynliga radbrytningstecken.

Tack!

MVH Sven Darwall

The best things in life is free

FoHs bild

Inga problem Smile Kul att det fungerar!

Tur Nille är så skarpögd. Själv hade jag inte reflekterat över ^M och än mindre vetat vad det berott på Smile