ファイルの先頭に共通文字列を追加して複数のファイルの名前を変更するには?

ファイルの先頭に共通文字列を追加して複数のファイルの名前を変更するには?

100個のファイルがあります。すべてのファイル名の前に「new」というテキストを追加したいと思います。

助けてください。よろしくお願いします。

例:

ファイル1.txt --->新しい_ファイル1.txt
ファイル100.txt --->新しい_ファイル100.txt

複数のファイルの名前を変更するソリューションを提供します。私が試したことは次のとおりです。しかし、これはより良い解決策ではありません。

 
bala@SMS:~/test1$ ls -l
合計0
-rw-rw-r-- 1 bala bala0 8月31日 19:10 file1.txt
-rw-rw-r-- 1 bala bala0 8月31日 19:10 file2.txt
-rw-rw-r-- 1 bala bala0 8月31日 19:10 file3.txt
bala@SMS:~/test1$ mv file1.txt new_file1.txt
bala@SMS:~/test1$ mv file2.txt new_file2.txt
bala@SMS:~/test1$ mv file3.txt new_file3.txt
bala@SMS:~/test1$ ls
新しいファイル 1.txt 新しいファイル 2.txt 新しいファイル 3.txt
bala@SMS:~/test1$

答え1

複数のファイルのファイル名を変更するには、ループを使用する必要があります。

for file in *
do
    mv -v ${file} new_${file}
done

同じコード行:

for file in *; do mv -v ${file} new_${file}; done

答え2

$ find . -type f -name "file*.txt" -execdir mv {} new_{} \;

現在のディレクトリ(またはその下)で​​、名前がパターンと一致するすべての一般的なファイルを見つけ、名前にプレフィックスを追加してfile*.txtこれらのファイルの名前を変更します。new_

これをfind理解する人が必要です-execdir(ほとんどの最新のfind実装ではそうです)。この-execdirオプションは同様に機能しますが、-exec見つかったコンテンツのディレクトリでユーティリティ()を実行します。mvまた、{}見つかったものの基本名も含まれます。

現在のディレクトリに制限ただ-maxdepth 1、以前のどこかに追加されました-execdir


bash-4.4$ mkdir dir{1..10}
bash-4.4$ touch dir{1..10}/file{1..10}.txt

bash-4.4$ ls
dir1  dir10 dir2  dir3  dir4  dir5  dir6  dir7  dir8  dir9

bash-4.4$ ls dir5
file1.txt   file2.txt   file4.txt   file6.txt   file8.txt
file10.txt  file3.txt   file5.txt   file7.txt   file9.txt

bash-4.4$ find . -name "file*.txt" -execdir mv {} new_{} \;

bash-4.4$ ls dir5
new_file1.txt    new_file2.txt    new_file4.txt    new_file6.txt    new_file8.txt
new_file10.txt   new_file3.txt    new_file5.txt    new_file7.txt    new_file9.txt

答え3

[名前の変更]コマンドを使用して、システムにすでにインストールされていることを確認したり、オペレーティングシステムのパッケージマネージャを使用してインストールしたりできます。

[root@archy pippo]# rename -h

Usage:
 rename [options] <expression> <replacement> <file>...

Rename files.

Options:
 -v, --verbose    explain what is being done
 -s, --symlink    act on the target of symlinks

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see rename(1).

あなたの場合は、この簡単な交換を行う必要があります。

[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root    0 Aug 31 14:12 file1.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file2.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file3.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:24 .
[root@archy pippo]# rename -v file new_file *.txt
`file1.txt' -> `new_file1.txt'
`file2.txt' -> `new_file2.txt'
`file3.txt' -> `new_file3.txt'
`file4.txt' -> `new_file4.txt'
[root@archy pippo]# ls -lrta
total 8
drwxr-x--- 6 root root 4096 Aug 31 14:12 ..
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file1.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file2.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file3.txt
-rw-r--r-- 1 root root    0 Aug 31 14:12 new_file4.txt
drwxr-xr-x 2 root root 4096 Aug 31 14:27 .
[root@archy pippo]#

望むより:)

答え4

mvそして使用サポート拡張ループ内で。

for N in {1..100}; do
     mv {,new_}file$N.txt
done

コマンドを実行する前に、mvシェルはコマンドを各ファイルのコマンドに展開し、対応するシーケンス$N番号が置き換えられます。

mv file$N.txt new_file$N.txt

だからこれプレフィックスファイル名に。

関連情報