लिनक्स: सभी फाइलों को एक ही नाम के साथ अलग-अलग फ़ाइल नाम से खोजने और उन्हें स्थानांतरित करने का तरीका


2

मेरे पास सैकड़ों छवियों के साथ एक डायर है, उनमें से कुछ कच्चे प्रारूप (सीआर 2 में समाप्त) हैं, लेकिन कुछ के लिए मैंने उन्हें जेपीजी में बदल दिया है, इसलिए मेरे पास सीआर 2 और जेपीईजी दोनों हैं।

मैं उन सभी फ़ाइलों को कैसे प्राप्त करूं जो कि jpg और cr2 दोनों को समाप्त करती हैं और उन्हें दूसरे डायर में स्थानांतरित करती हैं।

इसलिए ls *.jpg मुझे उन सभी को देना होगा जो कि jpg में समाप्त होते हैं और वहाँ से मुझे cr2 में उन सिरों को खोजने की आवश्यकता है मैं उसको कैसे करू? फिर मैं उन्हें कैसे स्थानांतरित करूँगा?

जवाबों:


2

मैं उपयोग करूंगा find(1) इस कार्य के लिए:

find . -name '*.jpg' -exec /bin/sh -c 'A=`basename {} .jpg`.cr2 ; test -f $A && mv {} $A /other/dir' \;

2

एक त्वरित बैश लाइन होगी:

for FILE in `ls *.jpg`; do BF=`basename $FILE .jpg`; 
   if test -e $BF.cr2 ; then mv $BF.jpg $BF.cr2 destdir/; fi; done


@AnonymousLurker: आप सही हैं - इस मामले में ls पूरी तरह से uselese है, आप इसे केवल * .jpg के बजाय उपयोग कर सकते हैं - मैंने इसे रखना पसंद किया क्योंकि इसमें प्रश्न शामिल था ls *.jpg यदि वह इसे एक अलग कमांड के साथ बदलना चाहता था (और उत्पन्न छवि फ़ाइल के साथ नाम में व्हाट्सएप के साथ समस्या आम तौर पर होनी चाहिए)।
flolo

0

आपको पायथन या पर्ल के साथ ऐसा करने के लिए एक स्क्रिप्ट लिखने की आवश्यकता होगी जो संभवतः आपका सबसे अच्छा दांव है।

यहाँ एक स्क्रिप्ट है जो मैंने पर्ल में लिखी है जो मूल रूप से (jpeg & amp; कच्ची फाइलें) करती है और उन्हें एक "दिनांकित निर्देशिका संरचना" में स्थानांतरित करती है (यानी YYYY / MM-month / DD)। इसका उपयोग करता है Image::ExifTool पुस्तकालय को फोटो की तारीख निकालने के लिए यह जानने के लिए कि इसे कहां रखा जाए

अपने सटीक प्रश्न के लिए, आप देख सकते हैं कि यह सभी .jpg फाइलें ढूंढता है, बेसनेम का काम करता है, और फिर मिलान .nef फाइल की जांच करता है।

#! /usr/bin/perl

$dryrun = 0;
$encode = 1;

use Image::ExifTool;
use Dumpvalue;
my $Dumper = new Dumpvalue();

@Months = qw(00 01-January 02-February 03-March 04-April 05-May 06-June 07-July 08-August 09-September 10-October 11-November 12-December);

$startdir = shift @ARGV;
die "error: no start directory specified\n" unless ($startdir ne "");
foreach $file (split(/\n/,`find "$startdir" -name "*.[Jj][Pp][Gg]" -print | sed -e 's,^\./,,'`)) {
  next if ($file =~ m,(^|/).xvpics/,);

  print STDERR "$file => ";
  my $exif = new Image::ExifTool;
  $info = $exif->ImageInfo($file);
  if (ref($info) != "HASH") {
    print STDERR "error: could not read exif data from '$file' ($@)\n";
    next;
  }

  ($filename) = ($file =~ m,([^/]+)$,);
  #     $Dumper->dumpValue($info);
  #     next;
  #     exit(1);

  $date = $info->{"CreateDate"};
  #print STDERR $date," => ";

  unless (($y,$m,$d,$h,$n,$s) = ($date =~ m/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D+(\d\d)\D(\d\d)\D(\d\d)($|\D)/)) {
    $date = $info->{"FileModifyDate"};
    unless (($y,$m,$d,$h,$n,$s) = ($date =~ m/^(\d\d\d\d)\D(\d\d)\D(\d\d)\D+(\d\d)\D(\d\d)\D(\d\d)($|\D)/)) {
      print STDERR "$file: no date for '$file' (skipped)\n";
      next;
    }
  }

  next if ($file eq "$outdir/$filename");
  system("mkdir","-p",$outdir) unless (-d $outdir || $dryrun);

  print STDERR "$outdir/".$filename;
  rename($file,"$outdir/".$filename) unless $dryrun;

  $jpgfile  = $filename;
  $file     =~ s/\....$/\.nef/;
  $filename =~ s/\....$/\.nef/;
  if (-f $file) {
    print STDERR " ($outdir/$filename)";
    rename($file,"$outdir/".$filename) unless $dryrun;
    chmod(0644, "$outdir/".$jpgfile) unless $dryrun;
  }

  print STDERR "\n";
}

ये है नहीं उच्च गुणवत्ता वाला कोड। :-) यह एक हैक है जिसे मैंने अपने लिए लिखा था लेकिन इसे एक उचित उदाहरण के रूप में प्रस्तुत करना चाहिए।


धन्यवाद! मैं शायद अपना खुद का लिखूँगा फिर :)! प्रतिक्रिया के लिए धन्यवाद :)!

0

इस स्क्रिप्ट में 'Move2dir' को बदलें (दो बार) जहां भी फाइलें समाप्त होने वाली हैं, और फिर इसे उस निर्देशिका से चलाएं जहां आपकी jpg और cr2 फाइलें हैं।

for file in `ls *jpg`
do
  if [ -e ${file/%jpg/cr2} ] 
  then
    cr2file=${file/%jpg/cr2}
    mv $file move2dir/
    mv $cr2file move2dir/
    echo moved $file and $cr2file
  fi
done

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.