Esiste un'app / modo OSX per rinominare i file in batch tramite un'interfaccia puramente testuale?


4

Molti anni fa - quando ero un utente Windows - avevo un'applicazione che rendeva la ridenominazione dei file un'esperienza incredibilmente semplice. Dovresti selezionare i file con cui desideri lavorare e i loro nomi di file appariranno in quella che era essenzialmente una grande area di testo. Immagina un editor di testo (come TextEdit, Sublime Text, ecc.) Aperto a un documento che elenca semplicemente tutti i nomi di file, con ogni nome di file su una nuova riga.

Con i file in questa interfaccia, disponevi dei tuoi strumenti di ricerca / sostituzione "standard" (CMD + F) e della possibilità di utilizzare REGEX. È possibile utilizzare le frecce della tastiera per spostarsi tra i nomi dei file senza clic aggiuntivi o interfacce ingombranti. I nomi dei file modificati sono stati evidenziati con uno sfondo diverso e l'applicazione delle modifiche a tutti i file è stata una semplice CMD + S.

Esiste qualcosa del genere per OSX?

// modifica - per chiarire: sono a conoscenza delle opzioni di rinominazione dei file bulk incorporate di OSX in Finder e software simili a NameChanger, Renamer, Automator, ABetterFinderRename, ecc. In particolare cerco software con il tipo di UI che ho descritto.

// modifica 2: il software Windows originale si chiama Oscar's Renamer: http://www.mediachance.com/free/renamer.htm


Potresti indicarci il nome dell'app di Windows? È possibile che ci siano già pagine online piene di persone che chiedono per nome una versione Mac dell'app.
user24601

Quindi, quando il programma inizialmente è stato aperto, c'era un nuovo elenco separato da righe dei nomi dei file, e dopo averli modificati il ​​programma ha saputo su quale linea era il file originale e lo ha rinominato in qualunque modo la riga corrispondente ora legga?
forquare,

Hai uno screenshot dell'applicazione Windows, così le persone capiscono cosa cercare?
nwinkler,

Ho provato a scavare la versione di Windows, ma finora sono rimasto vuoto. Sono passati 6-7 anni.
Yuriy Babenko,

@forquare, questo è generalmente corretto, tranne per il fatto che hai cercato la cartella contenente i file da rinominare dopo aver aperto il programma, sebbene (per me) non importa come / quando il programma scopre i file. L'interfaccia di ridenominazione (di una grande area di testo) è la chiave.
Yuriy Babenko,

Risposte:


5

Emacs può farlo.

  1. Apri Emacs
  2. C-x C-fe apri la directory. Si aprirà dired-mode.
  3. M-x wdired-change-to-wdired-mode RET

Ora puoi modificare i nomi dei file proprio come hai chiesto. La pressione C-c C-cterminerà in modalità cablata ed eseguirà le modifiche.

wdired-change-to-wdired-mode è una funzione interattiva Lisp caricata automaticamente in `wdired.el '.

È legato a.

(Wdired-cambio-di-modalità wdired)

Mette un buffer Dired in modalità Writable Dired (WDired).

In modalità WDired, è possibile modificare i nomi dei file nel buffer, la destinazione dei collegamenti e i bit di autorizzazione dei file. Dopo aver digitato Cc Cc, Emacs modifica i file e le directory in modo da riflettere le modifiche.

Vedi "modalità cablata".


OS X viene fornito con emacs per il terminale - Le versioni della GUI sono anche facilmente installabili
Segna il

1

Se usi OS X Yosemite (v10.10.x), Finder ha un modo integrato per rinominare in batch i file. Evidenzia tutti i file desiderati nel Finder, tieni premuto Ctrl e fai clic su uno di essi per visualizzare un menu di scelta rapida, quindi fai clic su "Rinomina x file ...". Avrai una bella interfaccia di ricerca e sostituzione, nessun software di terze parti necessario!


2
Sono a conoscenza di quella funzione e non è assolutamente quello che sto cercando.
Yuriy Babenko il

1

Segui questi passi:

  1. Installa DiffMerge e gem install batch_rename(vedi README.md per i dettagli).

  2. In Terminal.app, cdnella directory che contiene i file che si desidera rinominare.
    (Per comodità, suggerisco di ⌘-trascinare la cartella dal Finder nella finestra Terminale.)

  3. Digita batch-renamee premi Invio. Questo apre un editor interattivo.
    Lo script attenderà la chiusura dell'editor. Quindi rinominerà i file.

(Divulgazione: sono l'autore dello batch-renamestrumento.)


Modifica: mi è piaciuto così tanto il problema di OP che ho trasformato la mia risposta in uno strumento da riga di comando per la comodità di tutti. Per trarre vantaggio dalla semplificazione, ho anche riscritto la mia risposta sopra.

Ho caricato la fonte su GitHub e l' ho pubblicata come gemma installabile su RubyGems.
Entrambi hanno una licenza ISC, quindi sentitevi liberi di inviarmi problemi e inviare richieste.

Di seguito puoi trovare la mia risposta originale come riferimento.


1. Installa DiffMerge .

2. cdnella directory di lavoro corretta.

3. Esegui il seguente script Ruby:

( batch_rename.rb)

#!/usr/bin/env ruby
# encoding: utf-8

require 'shellwords'
require 'tmpdir'

Catalog = Struct.new(:time, :title, :file_name, :escaped_file_name) do
  def lines
    File.open(file_name).each.map(&:chop)
  end
end

CAPTION = "Batch rename - #{ Dir.pwd }"
DIFF_TMP_DIR = Dir.mktmpdir('batch-rename-')
DIFFMERGE = '/usr/local/bin/diffmerge'

catalogs = [:before, :after].map do |t|
  title = "#{ t.capitalize } renaming"
  file_name = "#{ DIFF_TMP_DIR }/#{ title }.utf8"
  escaped_file_name = Shellwords.escape(file_name)
  Catalog.new(t, title, file_name, escaped_file_name)
end

`ls -A | tee #{ catalogs.map(&:escaped_file_name).join(' >') }`

args = catalogs.map.with_index do |c, i|
  ["-t#{ i+1 }=#{ c.title }", c.file_name]
end

system(DIFFMERGE, "-c=\"#{ CAPTION }\"", *(args.flatten))

puts catalogs
  .map(&:lines)
  .reduce(&:zip)
  .select { |a| a.reduce(&:!=) }
  .map { |pair| pair.map(&Shellwords.method(:escape)) }
  .map { |a, b| "mv #{a} #{b}" }
  .join("\n")


1

Per l'utente Sublime Text, esiste un pacchetto chiamato SublimeFileBrowser che in pratica è diretto in Sublime Text più il trucco di tutti i movimenti del cursore della tastiera di Sublime Text. Puoi accoppiare Text-Pastry o qualsiasi altro pacchetto che possa aiutarti a manipolare facilmente il testo.


0

È da un po 'che non lo uso. Ma FileBuddy è progettato per manipolare i nomi dei file e un sacco di altre cose. Potrebbe valere la pena dare un'occhiata.


1
Grazie, ma come con l'altra risposta, totalmente non l'interfaccia che sto cercando.
Yuriy Babenko il

0

Nel terminal hai:

  • perl
  • pitone
  • zsh / bash / sh
  • awk / sed / trovare / mdfind / xargs

Tutti hanno pagine di manuali e volumi di testo scritti su Internet in esercitazioni. Direi che, se ti piacciono i regex, il tempo necessario per adottare uno degli strumenti unix per sfruttare solo la ridenominazione del testo sarebbe basso e il ritorno sull'investimento elevato poiché potresti quindi iniziare ad automatizzare cose ancora più difficili che semplicemente rinominare i file.

Se hai davvero bisogno di una GUI, potresti sfruttare uno qualsiasi dei lanciatori come LaubchBar o Alfred per dare il via alle cose ed eseguire i tuoi script di shell.


0

Ecco YACLBFR (*) in perl basato sulla versione più semplice di Larry Wall di molti anni fa ...

#!/usr/bin/perl
#
# rename - originally from Larry Wall:
# Examples:
#   rename 's/\.orig$//' *.orig
#   rename 'y/A-Z/a-z/ unless /^Make/' *
#   rename '$_ .= ".bad"' *.f
#   rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *
#
# Author: Eric Engstrom <eric (dot) engstrom (AT) g m a i l (dot) c o m>
##

use Getopt::Long qw(:config bundling);
use Pod::Usage;
use File::Basename;

GetOptions('h|help'     => \$HELP,
           'n|dryrun'   => \$DRYRUN,
           'v|verbose'  => \$VERBOSE,
           'f|force'    => \$FORCE
           )
  or pod2usage(2);
pod2usage(1) if $HELP;
($expr = shift) || pod2usage(2);

if (!@ARGV) {
  @ARGV = <STDIN>;
  chop(@ARGV);
}
for (@ARGV) {
  $was = $_;
  eval $expr;
  die $@ if $@;
  mkdirs($_);
  printf("%s%s >>> %s\n", $was, (length($was.$_) < 80 ? "" : "\n"), $_)
    if (($VERBOSE || $DRYRUN) && ! ($was eq $_));
  warn "$_ already exists - not renaming $was\n"
    if ( ! $DRYRUN && ! $FORCE && -e $_ );
  rename($was,$_)
    unless ($DRYRUN || $was eq $_ || (! $FORCE && -e $_));
}

sub mkdirs($) {
  my $dir = dirname(@_);
  if (! -d $dir) {
    mkdirs($dir);
    print "making directory: $dir\n"
      if $VERBOSE;
    mkdir $dir
      unless $DRYRUN;
  }
}


##

__END__

=head1 NAME

rename \- renames multiple files using perl expressions

=head1 SYNOPSIS

rename [options...] perlexpr [file...]

=head1 DESCRIPTION

B<Rename> renames the filenames supplied according to the rule
specified as the first argument.  The argument is a Perl expression
which is expected to modify the $_ string in Perl for at least some of
the filenames specified.  If a given filename is not modified by the
expression, it will not be renamed.  If no filenames are given on the
command line, filenames will be read via standard input.

For example, to rename all files matching *.bak to strip the extension,
you might say

    rename 's/\e.bak$//' *.bak

To translate uppercase names to lower, you'd use

    rename 'y/A-Z/a-z/' *

=head1 OPTIONS

    -h --help      brief help message
    -n --dryrun    show what would be renamed, but does not rename anything
    -v --verbose   be verbose during operation

=head1 AUTHOR

Eric Engstrom - email him as specified in the comments of this script
Seriously adapted from a previous incarnation by Father (Larry) Wall.

=head1 SEE ALSO

mv(1), perl(1), perlre(1)

(*) Ancora un altro rinominatore del file batch della riga di comando ...


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.