Відповіді:
Найпростішим способом є використання zsh. Щоб перемістити перші 3000 файлів у поточний каталог /other/directory
:
mv *([1,3000]) /other/directory
Якщо ви створили кілька підкаталогів, які потрібно виключити з цієї команди:
setopt extended_glob
mv *([1,3000])~(exclude-me|exclude-me-too) /other/directory
Для переміщення файлів старше 3 місяців (перший m
для "часу модифікації", а другий m
означає місяці; дробові частини ігноруються, тому +2
означає ≥3):
mv *(mm+2) /other/directory
Якщо ви хочете використовувати складні команди, ніж запускати іншу оболонку, це все одно розумні однобічні з 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
The find
команда повинна допомогти з деякими незначними сценаріями над ним.
Деякі посилання,
Визначте, як ви хочете перерозподілити файли і каталоги, щоб написати командний рядок або короткий сценарій на основі цих прикладів.
Такий сценарій має працювати, щоб перемістити перші NUMBER_OF_FILES файли до SUBDIRECTORY:
NUMBER_OF_FILES=3000
SUBDIRECTORY=target_folder_name
NUM=0
find . -type f -maxdepth 1 | sort > /tmp/$$
exec 4</tmp/$$
while read FILENAME <&4
do
NUM=`expr $NUM + 1`
if [ $NUM -le $NUMBER_OF_FILES ]
then
mv $FILENAME $SUBDIRECTORY
fi
done
rm /tmp/$$
Щось подібне для зміненого 90 днів або більше:
NUMBER_OF_DAYS=90
SUBDIRECTORY=target_folder_name
find . -type f -maxdepth 1 -mtime +$NUMBER_OF_DAYS | sort > /tmp/$$
exec 4</tmp/$$
while read FILENAME <&4
do
mv $FILENAME $SUBDIRECTORY
done
rm /tmp/$$
Як би я змінив відповідь Денніса Вільямсона:
find . -maxdepth 1 -type f -mtime +30 | rsync -nav --remove-source-files --files-from=- . archive/.
для тестування, і
find . -maxdepth 1 -type f -mtime +30 | rsync -av --remove-source-files --files-from=- . archive/.
за справжню річ.
Використання rsync замість mv відбувається лише тому, що rsync підтримує визначення вихідних файлів на стандартному введенні. Але додатковою перевагою є те, що rsync має безліч опцій для детального контролю, наприклад, справу з символічними посиланнями.
find
вwhile read
. Крім того, змінні, що містять імена файлів, повинні бути процитовані і кодуватись в межах циклів іif
оператори повинні мати відступ (я коду відформатував ваш код).