¿Existe una aplicación / forma OSX para cambiar el nombre de los archivos a través de una interfaz de texto?

4

Hace muchos años, cuando era usuario de Windows, tenía una aplicación que hacía que el cambio de nombre de los archivos fuera una experiencia increíblemente sencilla. Seleccionaría los archivos con los que desea trabajar y sus nombres de archivos aparecerían en lo que era esencialmente un gran área de texto. Imagine un editor de texto (como TextEdit, Sublime Text, etc.) abierto a un documento que simplemente enumera todos los nombres de archivo, con cada nombre de archivo en una nueva línea.

Con los archivos en esta interfaz, tenía sus herramientas de búsqueda / reemplazo "estándar" (CMD + F), así como la capacidad de usar REGEX. Puede usar las flechas del teclado para moverse por los nombres de archivo sin clics adicionales o interfaces voluminosas. Los nombres de archivos modificados se destacaron con un fondo diferente y la aplicación de cambios a todos los archivos fue un simple CMD + S.

¿Existe algo como esto para OSX?

// edit - para aclarar: soy consciente de las opciones integradas de cambio de nombre de archivos de OSX en Finder y del software como NameChanger, Renamer, Automator, ABetterFinderRename, etc. Soy específicamente buscando software con el tipo de IU que describí.

// edit 2: el software original de Windows se llama Renamer de Oscar: enlace

    
pregunta Yuriy Babenko 25.06.2015 - 01:13

8 respuestas

5

Emacs puede hacer esto.

  1. Abrir Emacs
  2. C-x C-f y abra el directorio. Se abrirá en dired-mode .
  3. M-x wdired-change-to-wdired-mode RET

Ahora puedes editar los nombres de archivo tal como lo pediste. Al presionar C-c C-c finalizará el modo inalámbrico y realizará las modificaciones.

  

wdired-change-to-wdired-mode es un Lisp interactivo con carga automática   función en 'wdired.el'.

     

Está vinculado a.

     

(wdired-change-to-wdired-mode)

     

Ponga un búfer Dired en modo Dired de escritura (WDired).

     

En el modo WDired, puede editar los nombres de los archivos en el búfer,   destino de los enlaces, y los bits de permiso de los archivos. Después   escribiendo C-c C-c, Emacs modifica los archivos y directorios para reflejar   tus ediciones.

     

Consulte "Modo inalámbrico".

    
respondido por el Alan Shutko 27.06.2015 - 19:25
1

Si estás en OS X Yosemite (v10.10.x), Finder tiene una forma integrada de renombrar archivos por lotes. Resalte todos los archivos que desee en el Finder, mantenga presionada la tecla Control y haga clic en uno de ellos para abrir un menú del botón derecho, y luego haga clic en "Renombrar x archivos ...". Obtendrá una interfaz agradable de buscar y reemplazar, ¡no se necesita software de terceros!

    
respondido por el user24601 25.06.2015 - 01:57
1

Sigue estos pasos:

  1. Instale DiffMerge y gem install batch_rename (consulte README.md para más detalles).

  2. En Terminal.app, cd al directorio que contiene los archivos que desea renombrar.
    (Para mayor comodidad, sugiero que ⌘-arrastre la carpeta desde el Finder a la ventana de la Terminal).

  3. Escriba batch-rename y presione Entrar. Esto abre un editor interactivo.
    La secuencia de comandos esperará a que cierre el editor. Luego cambiará el nombre de los archivos.

(Divulgación: Soy el autor de la herramienta batch-rename ).

Editar: Me gustó tanto el problema de OP que convertí mi respuesta en una herramienta de línea de comandos para la comodidad de todos. Para aprovechar la simplificación, también he reescrito mi respuesta anterior.

He subido la fuente a GitHub y lo publicó como una gema instalable en RubyGems.
Ambos están bajo una licencia ISC, así que no dudes en enviarme problemas y obtener solicitudes.

Puede encontrar mi respuesta original a continuación como referencia.

1. Instale DiffMerge .

2. cd al directorio de trabajo adecuado.

3. Ejecute el siguiente script de 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")

    
respondido por el Synoli 25.06.2015 - 21:26
1

Para el usuario de Sublime Text, hay un paquete llamado SublimeFileBrowser que básicamente es adired en Sublime Text más el truco de todos los movimientos del cursor del teclado de Sublime Text. Puedes emparejar con Text-Pastry o cualquier otro paquete que pueda ayudarte a manipular el texto fácilmente.

    
respondido por el Kent Liau 30.09.2016 - 16:49
0

Ha pasado un tiempo desde que lo he usado. Pero FileBuddy está diseñado para manipular nombres de archivos y un montón de otras cosas. Podría valer la pena verlo.

    
respondido por el Steve Chambers 25.06.2015 - 01:49
0

En la terminal, tienes:

  • perl
  • python
  • zsh / bash / sh
  • awk / sed / find / mdfind / xargs

Todos tienen páginas de manual y volúmenes de texto escritos en Internet en tutoriales. Yo diría que, si estás en expresiones regulares, la cantidad de tiempo que necesitarías para adoptar una de las herramientas de Unix para aprovechar el texto, solo cambiar el nombre sería bajo y el retorno de la inversión sería alto, ya que entonces podrías comenzar a automatizar cosas aún más difíciles. que simplemente renombrar archivos.

Si realmente necesitas una GUI, puedes aprovechar cualquiera de los lanzadores como LaubchBar o Alfred para comenzar y ejecutar tus scripts de shell.

    
respondido por el bmike 30.06.2015 - 01:46
0

Aquí está YACLBFR (*) en perl basado en la versión más sencilla de Larry Wall de muchos hace años ...

#!/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)

(*) Sin embargo, otro renombrador de archivos de línea de comandos ...

    
respondido por el eggo 30.06.2015 - 02:26
-1

Ya existe una muy buena herramienta de "servicio" llamada "A Better Finder Rename" en V9 y funciona perfectamente en Yosemite. enlace Ya lo probé / uso desde Leopard.

    
respondido por el LexS 27.06.2015 - 21:35

Lea otras preguntas en las etiquetas