web-dev-qa-db-ja.com

ファイルとディレクトリの名前の変更(プレフィックスの追加)

すべてのフォルダーとディレクトリにプレフィックスを追加したいと思います。

例:

私は持っています

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

プレフィックス「PRE_」を追加したい

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

よろしく、

112
Rafael

Peter van der Heijden のおかげで、ファイル名にスペースが含まれている場合に機能するものを次に示します。

for f in * ; do mv -- "$f" "PRE_$f" ; done

(「-」は、ダッシュで始まるファイルで成功するために必要です。ファイル名がなければ、名前はmvコマンドのスイッチとして解釈されます)

186
CanSpice

renameスクリプト をこのように使用します:

$ rename 's/^/PRE_/' *

ファイル名のメタ文字や空白には問題はありません。

76
tchrist

(プレフィックスまたはサフィックスを追加ファイル(ディレクトリ)の場合、xargsによるシンプルで強力な方法を使用できます。

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

Xargsのパラメーター置換オプション-Iを使用しています。また、manページから詳細を確認できます。

55
Zheng Qsin

これは、単純なfindコマンドを実行して実行できます。

find * -maxdepth 0 -exec mv {} PRE_{} \;

上記のコマンドは、現在のディレクトリ内のすべてのファイルとフォルダの前にPRE_を付けます。

26
Cyclonecode

Ruby(1.9+)を使用している場合

Ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'
7
kurumi

Util-linuxのrename(Debianや特定のシステムのPerlバリアントであるprenameとは対照的に)を使用して、現在のディレクトリ内のすべてのファイルとフォルダーにプレフィックスを追加するには、次のようにします。

rename '' <prefix> *

これにより、空の文字列(最初に見つかったもの)の最初の出現箇所が検出され、その出現箇所が接頭辞に置き換えられ、ファイル名の残りがその末尾に接着されます。できた.

suffixesの場合、 Perlバージョンを使用 または findを使用 にする必要があります。

7
koyae

perlの場合:

Perl -e 'rename $_, "PRE_$_" for <*>'
7
tadmc

使用できる簡単なスクリプトを次に示します。非標準モジュールFile::chdirを使用してcd操作の管理を処理するのが好きなので、このスクリプトをそのまま使用するには、インストールする必要があります(Sudo cpan File::chdir)。

#!/usr/bin/Perl

use strict;
use warnings;

use File::Copy;
use File::chdir; # allows cd-ing by use of $CWD, much easier but needs CPAN module

die "Usage: $0 dir prefix" unless (@ARGV >= 2);
my ($dir, $pre) = @ARGV;

opendir(my $dir_handle, $dir) or die "Cannot open directory $dir";
my @files = readdir($dir_handle);
close($dir_handle);

$CWD = $dir; # cd to the directory, needs File::chdir

foreach my $file (@files) {
  next if ($file =~ /^\.+$/); # avoid folders . and ..
  next if ($0 =~ /$file/); # avoid moving this script if it is in the directory

  move($file, $pre . $file) or warn "Cannot rename file $file: $!";
}
2
Joel Berger

私のシステムでは、renameコマンドがありません。シンプルなワンライナーです。すべてのHTMLファイルを再帰的に検索し、名前の前にprefix_を追加します。

for f in $(find . -name '*.html'); do mv "$f" "$(dirname "$f")/prefix_$(basename "$f")"; done
1
conradkdotcom

これにより、ディレクトリ内のファイルのプレフィックスが付けられます。

${f%/*}は最後のスラッシュまでのパスです/->ディレクトリ

${f##*/}は、最後のスラッシュの前に何もないテキストです/->パスなしのファイル名

それはそれが行く方法です:

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
0
SteinAir