Sunday, June 24, 2018

filesystems - how to move a lot of folders into a sub-folder in linux?



There are too many files [*] in a certain folder. I'd like to move some of them into a sub-folder. How can I:





  • move first 3000 files or folders into another folder, or

  • move files older than 3 months into another folder?



Thanks




  • http://www.google.com/search?hl=&q=Errno%3A%3AEMLINK)+“Too+many+links&



Answer



By far the easiest way is to use zsh. To move the first 3000 files in the current directory into /other/directory:



mv *([1,3000]) /other/directory


If you've created a few subdirectories that you want to exclude from that command:



setopt extended_glob

mv *([1,3000])~(exclude-me|exclude-me-too) /other/directory


To move files older than 3 months (the first m is for “modification time”, and the second m means months; fractional parts are ignored, so +2 means ≥3):



mv *(mm+2) /other/directory






If you'd rather use complicated commands than start a different shell, these are still reasonable one-liners with GNU find:



find -mindepth 1 -maxdepth 1 -print0 | head -n 3000 | xargs -0 -i mv {} /other/directory
find -mindepth 1 -maxdepth 1 -mtime +91 -print0 | xargs -0 -i mv {} /other/directory

No comments:

Post a Comment

hard drive - Leaving bad sectors in unformatted partition?

Laptop was acting really weird, and copy and seek times were really slow, so I decided to scan the hard drive surface. I have a couple hundr...