On Monday 22 November 2010, Peter Merchant wrote:
> 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
As an old time UNIX cli man thats exactly what I would have done!
Its exactly what they invented drag'n'drop for :)
--
Andy Paterson
--
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