3

Linux、bashで作業しています。

100 個のフォルダーを含む 1 つのディレクトリがあり、それぞれに異なる名前が付けられています。

これらの 100 個のフォルダーのそれぞれに、 first.bars という名前のファイルがあります (したがって、 first.bars という名前のファイルが 100 個あります)。すべて first.bars という名前ですが、実際のファイルはわずかに異なります。

これらすべてのファイルを 1 つの新しいフォルダーに移動し、これらのファイルの名前を変更/番号を付けて、どのファイルがどのフォルダーからのものかがわかるようにしたいと考えています。したがって、最初のfirst.barsファイルの名前を 001.bars に変更し、2 番目のファイルを002.barsなどに変更する必要があります。

私は次のことを試しました:

ls -d * >> /home/directorywiththe100folders/list.txt
cat list.txt | while read line;
do cd $line;
mv first.bars /home/newfolder

1 つのフォルダーに同じ名前の 100 個のファイルを含めることができないため、これは機能しません。したがって、それらの名前を変更する方法を知るだけで済みます。名前の変更は、cat list.txt に接続する必要があります。最初の行は、移動して名前を変更する最初のファイルを含むフォルダーだからです。そのファイルは 001.bars と呼ばれます。

4

2 に答える 2

5

これをやってみてください:

$ rename 's/^.*?\./sprintf("%03d.", $c++)/e' *.bar

このコマンドについて詳しく知りたい場合は、私が以前に提供した最近の回答を参照してください: Unix タイムスタンプで始まる複数のファイルの名前を変更するにはどうすればよいですか - imapsync の問題

于 2013-03-18T11:37:29.717 に答える
0

renameコマンドが使用できない場合は、

for d in /home/directorywiththe100folders/*/; do
    newfile=$(printf "/home/newfolder/%d.bars" $(( c++ )) )
    mv "$d/first.bars" "$newfile"
done
于 2013-03-18T13:16:47.910 に答える