On Mon, 2010-11-22 at 19:30 +0000, John Carlyle-Clarke wrote:
> On 22/11/10 18:05, Tim wrote:
> >
> > I am a cli dunce so please bear with me.
> >
> > Lets say I am working in the terminal screen in the following folder
> >
> > m...@computer:~#/folder1/folder2/folder3/folder4/folder5 mv blah
> > blah.........
> >
> > Now I want to go back to work in folder2, what the easy command to get me
> > back
> > there??
> >
> > I have to move a lot of files (1 and 2) between a lot of folders and
> > retyping
> > the full path everytime is wearing my keyboard out!!
> >
>
> All the other suggestions are excellent, but let's have some more ;)
>
> You could use shell variables to remember the paths:
>
> src=/folder1/folder2/folder3/folder4/folder5
> dst=/folder1/folder2
>
> Then use cd "$src" and cd "$dst" as required, or mv somefile "$dst"
>
> (The quotes stop things breaking if the paths have spaces in them.)
>
> Or, how about doing (in folder5):-
>
> ls > files
> vim files
> (OR nano files, OR gedit files, as you prefer)
>
> Delete the ones you don't want to move, then save the file and:
>
> dest=/folder1/folder2; while read -r file; do mv "$file" "$dest"; done <
> files
>
> (That's all on one line but it may wrap here)
>
> That should do a move for each filename, one per line, in "files".
>
> Another way is with find, if the files have some criteria you can
> define. Find has a lot of options, and can be a bit daunting, but a
> good pattern to remember is:-
>
> find [<paths>] [<tests>] [<actions>]
>
> The default path is "." and the default action is "print", so just
> typing "find" will recursively list files in the current directory and
> subdirectories.
>
> For example,
>
> find -mtime -1 -maxdepth 1
>
> Will print file names of files modified more recently than 24 hours ago
> in this directory only (will not go into subdirectories).
>
> There are many ways to use this. You could do:-
>
> find -mtime -2 -iname 'foo*' > files
>
> To send all files modified in the last two days matching foo* to a file
> called "files", and then use the mechanism above.
>
> Another way is to use the pattern:-
>
> find <stuff> -exec <command> '{}' \;
>
> That's a bit odd looking, but <command> gets executed for each file
> found, replacing '{}' with the name. For example:-
>
> find -mtime -2 -iname 'foo*' -exec mv '{}' /folder1/folder2
>
> (The first time, you may want to do..
>
> find -mtime -2 -iname 'foo*' -exec echo mv '{}' /folder1/folder2
>
> )
>
> (You can probably stop here if this is getting too much, or have a cup
> of tea and come back ... )
>
> You can also use xargs, which takes files on the standard input and
> executes a command, passing them as arguments to it. There are ways to
> control what to do if nothing is passed, or how many arguments at once
> the command can take. See man xargs for more.
>
> Here's an example:-
>
> find -mtime -2 -iname 'foo*' | xargs rm -i
>
> This will delete all files that find matches. It's easy if you want all
> the files chained onto the end of the command, but you don't so you have
> to use another option for xargs:-
>
> find -mtime -2 -iname 'foo*' | xargs -I '{}' mv '{}' /folder1/folder2
>
> Here, -I specifies some arbitrary string which gets replaced with the
> items being fed into xargs.
>
> There's one more strange thing you might see, and that is to avoid the
> fact that here files are 1 per line, but it is technically possible for
> a filename to contain a line break. You can make find spit things out
> separated with a NULL character instead, and tell xargs to expect this.
>
> find -mtime -2 -iname 'foo*' -print0 | xargs -0 -I '{}' mv '{}'
> /folder1/folder2
>
> One last bit of polish:-
>
> find -mtime -2 -iname 'foo*' -print0 | xargs --no-run-if-empty -0 -I
> '{}' mv '{}' /folder1/folder2
>
> That's probably self-explanatory.
>
> I know the above look a bit odd at first, but I found I'd learn them one
> "formula" at a time and each time I needed to do something different,
> I'd learn a variation, and so on.
>
> Have fun!
>
And my wife complains that under MS Windows there are so many ways to do
things and why couldn't they just have one way to do it.
I am lazy. From the terminal I would just type in 'sudo dolphin' and
split the display to move them.
Peter
--
Next meeting: Somewhere quiet, Bournemouth, ???day 2010-12-?? 20:00
Meets, Mailing list, IRC, LinkedIn, ... http://dorset.lug.org.uk/
How to Report Bugs Effectively: http://goo.gl/4Xue