Advertisement
sci4me

Untitled

Feb 19th, 2023
579
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | None | 0 0
  1. import java.io.*;
  2. import java.nio.file.Files;
  3. import java.nio.file.StandardCopyOption;
  4. import java.nio.file.attribute.BasicFileAttributes;
  5. import java.time.ZoneId;
  6. import java.util.*;
  7.  
  8. public class Main {
  9.     private static final Set<String> IMAGE_EXTENSIONS;
  10.  
  11.     static {
  12.         var exts = new HashSet<String>();
  13.         exts.add("jpg");
  14.         exts.add("jpeg");
  15.         exts.add("png");
  16.         exts.add("svg");
  17.         exts.add("jfif");
  18.         exts.add("jpg_large");
  19.         exts.add("webp");
  20.         exts.add("gif");
  21.         IMAGE_EXTENSIONS = exts;
  22.     }
  23.  
  24.     public static String getName(File file) {
  25.         var index = file.getName().lastIndexOf('.');
  26.         return file.getName().substring(0, index);
  27.     }
  28.  
  29.     public static String getExtension(File file) {
  30.         var index = file.getAbsolutePath().lastIndexOf('.');
  31.         return file.getAbsolutePath().substring(index + 1);
  32.     }
  33.  
  34.     private record FileSortKey(int year, int month) {
  35.     }
  36.  
  37.     public static FileSortKey getSortKey(File file) throws IOException {
  38.         var attrs = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
  39.         var time = attrs.lastModifiedTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
  40.         return new FileSortKey(time.getYear(), time.getMonthValue());
  41.     }
  42.  
  43.     public static void main(String[] args) throws Throwable {
  44.         final var srcDir = new File("/home/sci4me/Pictures");
  45.         final var dstDir = new File("/home/sci4me/Pictures2");
  46.  
  47.         int copied = 0;
  48.  
  49.         for (var file : srcDir.listFiles()) {
  50.             if (file.isDirectory()) {
  51.                 System.out.printf("Skipped directory '%s'\n", file);
  52.                 continue;
  53.             }
  54.  
  55.             var ext = getExtension(file);
  56.             if (!IMAGE_EXTENSIONS.contains(ext)) continue;
  57.  
  58.             if (Files.isSymbolicLink(file.toPath())) continue;
  59.  
  60.             var sort = getSortKey(file);
  61.             var fileDstDir = new File(dstDir, String.format("%d/%d", sort.year, sort.month));
  62.             if (!fileDstDir.exists()) fileDstDir.mkdirs();
  63.  
  64.             var fileNameAndExt = (getName(file) + "." + getExtension(file)).replaceAll(".jpg_large", ".jpg");
  65.             var dstFile = new File(fileDstDir, fileNameAndExt);
  66.             try {
  67.                 Files.copy(file.toPath(), dstFile.toPath(), StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES);
  68.             } catch (Throwable t) {
  69.                 System.out.println("Error copying " + file);
  70.                 t.printStackTrace();
  71.             } finally {
  72.                 file.delete();
  73.             }
  74.  
  75.             System.out.println("Copied " + file + " to " + dstFile);
  76.  
  77.             copied++;
  78.         }
  79.  
  80.         System.out.println("Copied " + copied + " files");
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement