我使用linux,bash。
我有一个目录中包含 100 个文件夹,每个目录名称不同。
在这100个文件夹中的每个文件夹中都有一个名为first.bars的文件(因此我有100个名为 first.bars 的文件)。虽然所有名为first.bars,但文件实际上略有不同。
我想将所有这些文件移动到一个新文件夹并重命名/编号这些文件,以便我知道哪个文件来自哪个文件夹。因此,第一个 first.bars 文件必须重命名为 001.bars ,第二个 002.bars 等等。
我尝试了以下内容:
ls -d * >> /home/directorywiththe100folders/list.txt
cat list.txt | while read line;
do cd $line;
mv first.bars /home/newfolder
这不起作用,因为我在一个文件夹中不能有100个名称相同的文件。所以我只需要知道如何重命名它们。重命名必须连接到cat list.txt,因为第一行是包含移动和重命名的第一个文件的文件夹。该文件将被称为001.bars。
答案 0 :(得分:5)
尝试这样做:
$ rename 's/^.*?\./sprintf("%03d.", $c++)/e' *.bar
如果您想了解有关此命令的更多信息,请参阅我之前给出的最近回复:How do I rename multiple files beginning with a Unix timestamp - imapsync issue
答案 1 :(得分:0)
如果rename
命令不可用,
for d in /home/directorywiththe100folders/*/; do
newfile=$(printf "/home/newfolder/%d.bars" $(( c++ )) )
mv "$d/first.bars" "$newfile"
done