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


137

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

例:

私が持っています

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/

よろしく、


この回答のようにAWKを使用:awk '$ 0 = "prefix" $ 0' file> new_file
Mark

回答:


224

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

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

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


ええ、確かに、スペースのあるファイルがある場合、これは完全に機能しません。
CanSpice 2011年

12
lsコマンドをに変更し*、引数を二重引用符で囲むと、mvスペースを含むファイルで機能します。
Peter van der Heijden、2011年

@CanSpice同様のスクリプトでこの操作を逆にする(プレフィックスを削除する)ことは可能ですか?
Pascal Qyy、2012

3
どうも。ここのインターンは、67のファイルすべての名前を変更して彼の指のキャップを失っていました。乾杯。
フェリペ

1
ダッシュで始まるファイルから保護するために、「mv」だけでなく「mv-」にする必要があります。そうしないと、コマンドスイッチとして解釈されます。これを修正する編集を寄稿します。
ジェイコブC.がモニカを復活させる

81

次のように名前変更スクリプトを使用します

$ rename 's/^/PRE_/' *

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


3
一部のシステムには、動作が異なる「rename」というutil-linuxユーティリティがあります(Ubuntuでは「rename.ul」と呼ばれます)。
追って通知があるまで一時停止。

rename私は常に複数のファイルの名前変更を非常に簡単に処理するのに役立ちました。
アランハガイAlavi

61

以下のために接頭辞や接尾辞の追加のファイル(ディレクトリ)のために、あなたはシンプルでかつ強力な方法を使用することができxargsの

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

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

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


2
PS:あなただけしたい場合は一部のファイルを名前変更:ちょうどのようなxargsは、前にそれをフィルタリングし、カレントディレクトリの(ディレクトリ)ls *.old | xargs -I {} mv {} PRE_{}
鄭QSIN

興味深いことに、名前の変更は機能しませんでした。xargsの使用は私のRHELセットアップでうまくいったので、このオプションを+1
すると

ファイル名に一重引用符が含まれていると機能しません。次のエラーで失敗します。xargs:一致しない一重引用符。-0オプションを使用しない限り、デフォルトで引用符はxargsに特別です
Evgeny Veretennikov

36

これは簡単なfindコマンドを実行して行うことができます:

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

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


8

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

rename '' <prefix> *

これにより、空の文字列の最初の出現箇所(すぐに見つかります)が検出され、その出現箇所がプレフィックスに置き換えられます。次に、ファイル名の残りの部分をその末尾に接着します。できました。

サフィックスについては、perlバージョン使用する、find使用する必要があります


util-linuxDebian Stretchでは、これをとして提供しているよう/usr/bin/rename.ulです。
user1338062 2018

7

Ruby(1.9+)をお持ちの場合

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


2

以下は、使用できる簡単なスクリプトです。非標準モジュール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: $!";
}

1

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

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

1
find:あなたはまた、ループの必要性コマンドを実行することはできませんstackoverflow.com/a/33297439/2351568
DJCrashdummy

0

これにより、ファイルのプレフィックスがディレクトリに追加されます。

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

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

これがその方法です。

for f in $(find /directory/ -type f); do 
  mv -v $f ${f%/*}/$(date +%Y%m%d)_Prefix_${f##*/}
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.