我想将扩展名为csv的文件名更改为#include <stdio.h>
#include <stdlib.h>
#include <limits.h> // For INT_MIN
int main(int argc, char ** argv) {
int l, i;
int first = INT_MIN; // It will set first and second at the minimum
int second = INT_MIN; // value possible for an int.
for (i = 1; i < argc; i++) { // there is no need for arr
// just use argc for iterations.
// The element 0 of argv is the
// binary name, thus i starts from 1
l = atoi(argv[i]); // as soon you are still learning
// atoi is a good solution, but you should
// consider something more robust for your
// conversion. Consider that if you give as
// input to your code
// bin.exe hello -1 -2
// the result is:
// First = 0, Second = -1
// since atoi("hello") is 0.
// in this way you are not forced to have less than
// 100 elements in input.
if (l > first) { // shifting the first
second = first;
first = l;
} else if (l > second) // saving only in the second
second = l;
}
printf("First = %d\nSecond = %d\n", first, second);
return 0;
}
。该文件位于test.txt
。
问题是,文件的名称每次都不同(例如:/Users/xx/xx
)并且它是不可预测的。但是,扩展名始终为csv,位置也是常量
我应该提一下,每次文件夹中唯一存在的文件是提到的csv文件,因此,文件夹中只有一个文件,每次名称都不同。
事实上,我需要改变
part-r-00000-865affea-3ead-445e-ad3e-8703a8d79026.csv
(名称始终更改)为part-r-00000-865affea-3ead-445e-ad3e-xxxx.csv
你能帮助我吗?
答案 0 :(得分:1)
您可以使用globbing来定位文件,而无需知道其全名。
考虑到你知道文件的目录,它的扩展名,并且它是唯一一个在此目录中具有此扩展名的目录,你可以简单地使用这个mv
:
mv /Users/xx/xx/*.csv /Users/xx/xx/test.txt
这会将.csv
(在您的情况下,您的单个CSV文件)中的每个/Users/xx/xx/
文件重命名为/Users/xx/xx/test.txt
。
如果有多个.csv
文件,那么显然会出现问题,因为每个文件都会覆盖前一个文件。如果它可能成为一个问题,你应该检查这个glob匹配的文件数量,如果它大于1则退出错误或使用一个只会对单个文件起作用的命令。