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
だからこれプレフィックスファイル名に。