move command

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

move command

Beitrag von linuxCowboy » 22.12.2014 13:43:27

mit welchem command erreiche ich Folgendes:

Code: Alles auswählen

[ ! -e ../dest/dir/file ] &&
MOVE_COMMAND ./dir/file ../dest/ &&
[ -e ../dest/dir/file ] &&
[ ! -e ./dir/file ] &&
echo thats it
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: move command

Beitrag von Inkodiktus » 22.12.2014 13:57:56

ich würde spontan sagen:
mv
ist das Kommando :)
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: move command

Beitrag von 4A4B » 22.12.2014 15:06:47

Wenn du es ganz spontan auch ausprobiert hättest, hättest du gesehen, dass dem nicht so ist - wäre wohl auch zu einfach gewesen :). Wobei ich eine Lösung leider auch nicht kenne.

Benutzeravatar
hikaru
Moderator
Beiträge: 13908
Registriert: 09.04.2008 12:48:59

Re: move command

Beitrag von hikaru » 22.12.2014 16:50:52

Zerlege dein MOVE_COMMAND:

Code: Alles auswählen

FILE=./dir/file
mkdir -p ../dest/$(dirname $FILE)
mv $FILE ../dest/$(dirname $FILE)/

Benutzeravatar
Inkodiktus
Beiträge: 702
Registriert: 15.08.2013 01:15:35
Lizenz eigener Beiträge: GNU General Public License
Wohnort: » host@user╺─╸[~]

Re: move command

Beitrag von Inkodiktus » 22.12.2014 18:24:30

hikaru hat geschrieben:Zerlege dein MOVE_COMMAND:

Code: Alles auswählen

FILE=./dir/file
mkdir -p ../dest/$(dirname $FILE)
mv $FILE ../dest/$(dirname $FILE)/
wie kommst du jetzt auf mkdir???
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)

Benutzeravatar
hikaru
Moderator
Beiträge: 13908
Registriert: 09.04.2008 12:48:59

Re: move command

Beitrag von hikaru » 22.12.2014 18:56:00

Weil ../dest/dir im Zweifelsfall noch nicht existiert.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: move command

Beitrag von rendegast » 23.12.2014 05:12:19

Code: Alles auswählen

mv ./dir ../dest/ &&
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
hikaru
Moderator
Beiträge: 13908
Registriert: 09.04.2008 12:48:59

Re: move command

Beitrag von hikaru » 23.12.2014 10:29:33

rendegast hat geschrieben:

Code: Alles auswählen

mv ./dir ../dest/ &&
Das verschiebt aber alle Dateien unter ./dir und nicht nur ./dir/file

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: move command

Beitrag von habakug » 23.12.2014 11:29:59

Hallo!

Code: Alles auswählen

$ ls test_1 test_2
test_1:
file

test_2:
$ find test_1 -name file | xargs mv -t test_2/
$ ls test_1 test_2
test_1:

test_2:
file
Gruss, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
hikaru
Moderator
Beiträge: 13908
Registriert: 09.04.2008 12:48:59

Re: move command

Beitrag von hikaru » 23.12.2014 12:10:13

habakug hat geschrieben:$ find test_1 -name file | xargs mv -t test_2/
Das erhält aber nicht die unter test_1 existierende Verzeichnisstruktur unter test_2.
Was ist hier der Gewinn gegenüber einem simplen mv?

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: move command

Beitrag von habakug » 23.12.2014 12:44:07

Hallo!

Code: Alles auswählen

$ ls -R test_1
test_1:
sub

test_1/sub:
file
$ ls -R test_2
test_2:
$ [[ ! -e test_2/sub/file ]]; mv $(find test_1 -name file | sed -e s:\/file::g) test_2/
$ ls -R test_1
test_1:
$ ls -R test_2
test_2:
sub

test_2/sub:
file
Gruss, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Benutzeravatar
hikaru
Moderator
Beiträge: 13908
Registriert: 09.04.2008 12:48:59

Re: move command

Beitrag von hikaru » 23.12.2014 13:04:28

Was aber auch nur geht, wenn sub ein einzelnes Verzeichnis und keine Verzichnisstruktur ist:

Code: Alles auswählen

$ ls -R test_1 test_2
test_1:
sub

test_1/sub:
sub_a

test_1/sub/sub_a:
file

test_2:
$ mv $(find test_1 -name file | sed -e s:\/file::g) test_2/
$ ls -R test_1 test_2
test_1:
sub

test_1/sub:

test_2:
sub_a

test_2/sub_a:
file
Vielleicht sollte linuxCowboy mal die Situation genauer spezifizieren. ;)

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: move command

Beitrag von linuxCowboy » 23.12.2014 21:18:33

Weihnachen ;-) ...dank euch allen!
hikaru hat geschrieben:Vielleicht sollte linuxCowboy mal die Situation genauer spezifizieren. ;)
Nach einem find in einem directory tree will ich die files mit vollem Pfad sichern statt löschen.

Sieht so aus als müßte man das selbst zusammmensetzen?

Hier meine aktuelle Lösung:

Code: Alles auswählen

mvx () { [ -f "$1" ] && f=`echo $1|perl -pe's%^\.*/%%'` && d=${f%/*} && mkdir -p "${2%/}/$d" && mv -v "$1" "${2%/}/$d";}
Caller:

Code: Alles auswählen

(IFS=$'\n'; for i in `find -name '*wav'`;do mvx "$i" ../d2;done)
oder:

Code: Alles auswählen

mvxt () { [ ! -f "$1" ] && D="$1" && shift && for F;do mvx "$F" "$D";done;}
Example: NoPaste-Eintrag38183

(Das ls ist meine Version - da schwächeln die coreutils leider auch :cry: )
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: move command

Beitrag von linuxCowboy » 24.12.2014 02:14:34

Bugfix:

Code: Alles auswählen

/tmp/d1 $ mvx () { [ -f "$1" ] && f=`echo $1|perl -pe's%^\.*/%%'` && { if [[ $f =~ / ]];then d=${f%/*};else d=;fi;} && mkdir -p "${2%/}/$d" && mv -v "$1" "${2%/}/$d";}
pretty:

Code: Alles auswählen

mvx ()
{
	[ -f "$1" ] &&
		f=`echo $1 | perl -pe 's%^\.*/%%'` &&
			{
				if [[ $f =~ / ]]; then
					d=${f%/*}
				else d=
				fi
			} &&
				mkdir -p "${2%/}/$d" &&
					mv -v "$1" "${2%/}/$d"
}
Test:

Code: Alles auswählen

/tmp/d1 $ touch x.{wav,mp3}
/tmp/d1 $ llr ../d*
../d1:
total 4
drwxr-xr-x 2 dtc dtc 4096 24.12. 2014 01:42:23 dir/
-rw-r--r-- 1 dtc dtc    0 24.12. 2014 01:42:44 x.mp3
-rw-r--r-- 1 dtc dtc    0 24.12. 2014 01:42:44 x.wav
  2 Files  0 Links  1 Dir  -  4.096 Bytes 

../d1/dir:
total 0
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 a.mp3
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 a.wav
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 b.mp3
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 b.wav
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 'c d.mp3'
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 'c d.wav'
  6 Files  0 Links  0 Dirs  -  0 Bytes 

../d2:
total 4
drwxr-xr-x 2 dtc dtc 4096 24.12. 2014 01:42:23 dir/
  0 Files  0 Links  1 Dir  -  4.096 Bytes 

../d2/dir:
total 0
  8 Files  0 Links  2 Dirs  #  8.192 Bytes 

/tmp/d1 $ (IFS=$'\n'; for i in `find -name '*wav'`;do mvx "$i" ../d2;done)
`./x.wav' -> `../d2/x.wav'
`./dir/b.wav' -> `../d2/dir/b.wav'
`./dir/a.wav' -> `../d2/dir/a.wav'
`./dir/c d.wav' -> `../d2/dir/c d.wav'

/tmp/d1 $ llr ../d*
../d1:
total 4
drwxr-xr-x 2 dtc dtc 4096 24.12. 2014 01:49:55 dir/
-rw-r--r-- 1 dtc dtc    0 24.12. 2014 01:42:44 x.mp3
  1 File  0 Links  1 Dir  -  4.096 Bytes 

../d1/dir:
total 0
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 a.mp3
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 b.mp3
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 'c d.mp3'
  3 Files  0 Links  0 Dirs  -  0 Bytes 

../d2:
total 4
drwxr-xr-x 2 dtc dtc 4096 24.12. 2014 01:49:55 dir/
-rw-r--r-- 1 dtc dtc    0 24.12. 2014 01:42:44 x.wav
  1 File  0 Links  1 Dir  -  4.096 Bytes 

../d2/dir:
total 0
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 a.wav
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 b.wav
-rw-r--r-- 1 dtc dtc 0 23.12. 2014 20:21:46 'c d.wav'
  3 Files  0 Links  0 Dirs  -  0 Bytes 
  8 Files  0 Links  2 Dirs  #  8.192 Bytes 
/tmp/d1 $ 
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: move command

Beitrag von linuxCowboy » 25.12.2014 10:37:51

PS: Coreutils: Das ist Jammern auf hohem Niveau! Man kann es sich ja selbst zusammenbauen. Also :THX:

( ...so ist Samba enstanden - weil jemand eine kleines Problem lösen wollte! :wink: )
-der_linux_cowboy --- Besser werden! ... f*** w$$

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: move command

Beitrag von linuxCowboy » 26.12.2014 19:45:36

Fmvx () - Christmas Release:

Code: Alles auswählen

Fmvx ()
{
    [[ ! $2 || $1 = -h || $1 = --help || ! -f $1 || -e $2 && ! -d $2 ]] && 
        echo "\n\t $FUNCNAME filepath/file dir # file => dir/filepath/file\n" &&
            return

    local filepath=$1
    [[ $filepath =~ ^\.*/(.*) ]] && filepath=${BASH_REMATCH[1]}

    if [[ $filepath =~ / ]]; then
        filepath=${filepath%/*}
    else
        filepath=
    fi

    mkdir -p "${2%/}/$filepath" &&
        mv -v "$1" "${2%/}/$filepath"
}
Syntax Highlighting: NoPaste-Eintrag38186
-der_linux_cowboy --- Besser werden! ... f*** w$$

ren22

Re: move command

Beitrag von ren22 » 31.12.2014 15:53:41

dein Code in Kombination mit:

Code: Alles auswählen

(IFS=$'\n'; for i in `find -name '*.8'`;do Fmvx "$i" ../d2;done)
mal sehen ob man das auch auf mehrere Dateien umscripten kann ^^

TOP ... funktioniert bestens :THX: :THX: :THX: :THX: :THX: :THX: :THX: :THX: :hail: :hail: :hail: :hail:

Antworten