Groovy: فائلوں کو بازگشتی طور پر نام تبدیل کریں
Publié le 29 July 2019
میرا ویڈیو پلیئر میری TV پر اپنی ایک طریقہ سے گزر رہا ہے۔
ایک فائل سے دوسرے فائل تک مسلسل پڑھتے ہوئے
اور اس کا چلنے کا طریقہ 1…..mp4 سے 10….mp4 تک جانے کا ہے,
اور 1…mp4 سے 2….mp4 تک نہیں
مسئله یہ ہے کہ تقریباً 900 فائل اور فارڈر ہیں۔
Bingo Groovy کے manipulate کرنے کا ایک بہترین استعمال کا مثال
फ़ाइलों, नाम बदलना, फ़ाइल के नाम में पैटर्न खोजना
یا فائل۔
یہاں مقصد یہ ہے کہ ناموں جو شروع ہوتے ہیں کو بدلنا ہے
ایک عدد اور جس کے نام کا دوسرا حرف
یہ عدد نہیں، میں اس نام کے ابتداء میں ایک 0 شامل کروں گا
renameFilesToStartWithTwoDigit.groovy
#!/usr/bin/env groovy
/**
* get a crossplateform separator
* @return
*/
static String getSeparator() {
System.getProperty("file.separator")
}
/**
* rename file
* @param file
* @param newName
* @return the renamed file
*/
static File rename(File file, String newName) {
assert file.renameTo(file
.parentFile.path +
getSeparator() +
newName)
new File(file
.parentFile.path +
getSeparator() +
newName)
}
String rootFolderPath = System.getProperty("user.home") +
"/Bureau/ng-courses/Udemy - Angular 7 " +
"(formerly Angular 2) - The Complete Guide"
File rootFolder = new File(rootFolderPath)
assert rootFolder.exists()
assert rootFolder.directory
assert rootFolder.canRead()
List<File> dirList = new ArrayList<>()
//Adding rootFolder in dirList
// just in case there is some files in it
dirList.add(rootFolder)
//looping to get list of directories
//recursively inside rootFolder
rootFolder.traverse { File file ->
!file.directory ?: dirList.add(file)
}
//looping through dirList
//to rename directories filling criterias
for (int i = dirList.size() - 1; i >= 0; i--) {
Character[] chars = dirList.get(i).name.chars
!(chars[0].digit && !chars[1].digit) ?:
dirList.set(i, rename(dirList.get(i),
"0${dirList.get(i).name}"))
if (dirList.get(i).directory) {
//looping through directory
//to rename file filling criterias
dirList.get(i).listFiles().each { File f ->
Character[] cs = f.name.chars
!(cs[0].digit && !cs[1].digit) ?:
rename(f, "0${f.name}")
}
}
}