私のフォルダにこれらのファイルがあるとしましょう:
cat.txt
dog.txt
house.txt
tree.txt
すべての名前を次のように変更します。
file1.txt
file2.txt
file3.txt
file4.txt
コマンドライン経由でそれを行うことは可能ですか?
名前の変更dog1.txt
、dog2.txt
-> cat1.txt
、cat2.txt
のような、何らかのパターンのファイルの名前変更に関する質問を見ただけです。
これを行うには、rename
ユーティリティを使用します。
rename -n '$_ = sprintf "file%d.txt", ++$::count' *
-n
は、コマンドを実行すると何が起こるかを示します。出力が必要なものであった場合は、-n
なしで実行して、実際にファイルの名前を変更します。*
を、名前を変更したいものに置き換えます。たとえば、dog*.txt
、dog1.txt
のみをdog2.txt
、file1.txt
などに変更するには、file2.txt
を使用します。$_
は、変更する必要があるデフォルトの入力(ファイル名)です。=
を使用して変更していますsprintf
では、file
で始まり、その後に%d
が続くスキーマを定義しています。これは、数値を意味し、.txt
で終わります。++$::count
を使用して割り当てられます。これは、名前を変更するたびに繰り返される単純なカウンターです。アイデアは ここ 。から来ています
可能性があります完了しましたが、いくつか注意点があります。あなたは「...これらのファイルは私のフォルダにある」と述べたが、これはそのような警告の一つになるだろう。 globstar
を使用して、展開されたファイル名を反復処理できます。
$ c=0;for f in *; do ((c++)); echo "$f" "--->" file"$c".txt ; done
cat.txt ---> file1.txt
dog.txt ---> file2.txt
house.txt ---> file3.txt
tree.txt ---> file4.txt
もちろん、list.txt
を介して常に「手動」の方法で行くことができます。そこでは、ファイル名のリストを保存し、while IFS= read -r ; do ... done < list.txt
を介してそのファイルを読み取ることができます
$ c=0; while IFS= read -r f; do ((c++)); echo "$f" file"$c" ; done < input.txt
cat.txt file1
dog.txt file2
tree.txt file3
もちろん、このリストテーマは、csvリスト、jsonファイル、キー値リストなど、さまざまな方法で拡張できます。これらのオンラインに関する質問はたくさんあります。もちろん、ファイルへのフルパスを指定したり、リストと同じディレクトリ内ですべてを実行したりするなど、他の選択肢もあります。
最後に、私はすでにキーと値のリストをほのめかしています。 bash
およびその他のPythonやPerlなどの最新のスクリプト言語を使用すると、ファイルのリストとファイルに対応する新しい名前を持つハッシュ(または辞書)を作成できます。