Czy istnieje polecenie terminalu, aby podzielić folder na dwie części?

8

Mam folder z 80 000 plików na moim komputerze iMac G5 z systemem Ubuntu 12.04.1 i nie mogę go nawet otworzyć w Nautilusie, ponieważ zawiesza się.

Mogę zrobić ls -aw Terminalu, a to pokazuje mi wszystko.

Czy istnieje polecenie terminala, którego mógłbym użyć do podzielenia go na dwa katalogi o podobnej wielkości (pod względem liczby plików), aby Nautilus mógł łatwiej otworzyć jeden z nich? A może 4 foldery?

Zanna
źródło
2
Aby otworzyć 80 000 plików, podzielenie na 4 foldery nadal powodowałoby awarię programu nautilus na powerpc Imac G5! ... możesz spróbować, mkdir folder1a następnie cp *.txt folder1skopiować txtdo każdego z nich folder1i zrobić to dla rozszerzeń takich jak cp *.jpg folder2 cp *.doc folder3 cp *.docx folder3. Nautilus powinien mieć wtedy łatwiejsze zadanie do obejrzenia.
blade19899,
Zapomniałem wspomnieć, że wszystkie pliki są w formacie .jpg.
wybierz folder ze shotwell i pozwól shotwell stworzyć daty folderów i takie
blade19899

Odpowiedzi:

10

ls -1 | sort -n | head -40000 | xargs -i mv "{}" /destination/folder/

Dostosuj także head -40000do swoich potrzeb/destination/folder/

Frantique
źródło
1

Wypróbuj poniższy skrypt i znalazłem go na Linuxquestions.org

PhotosPath="/media/4GBSD/DCIM/101CANON"
SortPath="/home/angus/.imagesort"
LibraryPath="/home/angus/Photos"
CameraPath="/media/4GBSD"

zmień nazwę tych ścieżek, aby dostosować je do swoich potrzeb

#!/bin/bash
#
#
PhotosPath="/media/4GBSD/DCIM/101CANON"
SortPath="/home/angus/.imagesort"
LibraryPath="/home/angus/Photos"
CameraPath="/media/4GBSD"
CharFromName=4
echo 
echo 
############
# Test to see if $PhotosPath exists, if not promp for new path / exit.
test -d $PhotosPath || read -p "$PhotosPath does not exist, close to exit or type new path:" PhotosPath
test -d $PhotosPath || "read -p '$PhotosPath is invalid. Press enter to close' && exit"

############
# move files from camera to $SortPath
mv $PhotosPath/* $SortPath/

############
# rename all image files in $SortPath
# FolderDateDD-HHMMSS.ext
jhead  -autorot -ft -nf%y%m%d-%H%M%S $SortPath/*

###########
# Sort files into folders using $CharFromName letters of the file name
#
ls $SortPath | while read file; do
 # extract first $CharFromName characters from filename
 FolderDate=${file:0:$CharFromName}
 # create directory if it does not exist
 test -d $LibraryPath/$FolderDate || mkdir $LibraryPath/$FolderDate
 # move the current file to the destination dir
 mv -v $SortPath/$file $LibraryPath/$FolderDate/$file
done

##########
# move sorted files into photo library
#mv -v $SortPath/* $LibraryPath/ 

##########
# Umount the card
umount $CameraPath

##########
# End notification
echo 
echo "Photos  from: $PhotosPath"
echo "End location: $LibraryPath"
echo 
echo "The card has been ejected."
echo 
read -p "Press enter to close this window…"
blade19899
źródło
1
Zbyt skomplikowane, ale dzięki za kłopoty. Rozwiązanie drugiego faceta jest znacznie łatwiejsze. Ludzie muszą żyć dalej, wiesz, i nie marnować ich przed terminalem. Technologia ma ci pomóc, a nie pochłaniać cały twój czas ...
@Sergiu ani nie niszczy komputera! To drugie rozwiązanie jest zdecydowanie zbyt proste i nie zawaham się scharakteryzować jako niebezpieczne. Pętla for lub while doskonale tutaj by pasowała.
hytromo