Đổi tên tệp bằng node.js


90

Tôi còn khá mới trong việc sử dụng JS, vì vậy tôi sẽ cố gắng nói cụ thể nhất có thể :)

  • Tôi có một thư mục với 260 .png file với tên các quốc gia khác nhau: Afghanistan.png, Albania.png, Algeria.pngvv

  • Tôi có một tệp .json với một đoạn mã có tất cả các mã ISO cho mỗi quốc gia như sau:

{  
  "AF": "Afghanistan",  
  "AL": "Albania",  
  "DZ": "Algeria",  
  ...  
}
  • Tôi muốn đổi tên tệp .png bằng tên ISO của chúng trong trường hợp thấp. Đó có nghĩa là tôi muốn có đầu vào sau đây trong thư mục của tôi với tất cả các .pnghình ảnh: af.png, al.png, dz.pngvv

Tôi đã cố gắng tự mình nghiên cứu cách thực hiện điều này với node.js, nhưng tôi hơi bị lạc ở đây và tôi sẽ đánh giá cao một số manh mối.

Cảm ơn trước!

Câu trả lời:


153

Bạn sẽ cần sử dụng fs: http://nodejs.org/api/fs.html

Và đặc biệt là fs.rename()chức năng:

var fs = require('fs');
fs.rename('/path/to/Afghanistan.png', '/path/to/AF.png', function(err) {
    if ( err ) console.log('ERROR: ' + err);
});

Đặt nó trong một vòng lặp qua các khóa và giá trị của đối tượng JSON mới đọc của bạn và bạn đã có một tập lệnh đổi tên hàng loạt.

fs.readFile('/path/to/countries.json', function(error, data) {
    if (error) {
        console.log(error);
        return;
    }

    var obj = JSON.parse(data);
    for(var p in obj) {
        fs.rename('/path/to/' + obj[p] + '.png', '/path/to/' + p + '.png', function(err) {
            if ( err ) console.log('ERROR: ' + err);
        });
    }
});

(Ở đây, điều này giả định rằng .jsontệp của bạn đáng tin cậy và an toàn khi sử dụng các khóa và giá trị của nó trực tiếp trong tên tệp. Nếu không đúng như vậy, hãy đảm bảo thoát chúng đúng cách!)


9
2 dòng cuối cùng của câu trả lời của bạn là rất quan trọng :)
Pranav

bạn chỉ có thể nhập .json: const obj = require('/path/to/countries.json');và sau đó:for(var p in obj) {...}
ViES

1
Bạn có thể, nhưng ... không. Sử dụng require mã thực thi trong tệp đó. Bạn đang giới thiệu một cách để ai đó có khả năng đưa mã độc vào ứng dụng (tức là bằng cách sửa đổi tệp .json). Đọc và sử dụng JSON.parse()tránh hoàn toàn điều đó. Đừng xâm phạm tính bảo mật vì mục đích viết mã rất ít.
VoteyDisciple,

Sẽ an toàn hơn khi sử dụng path.resolve thay vì nối chuỗi đường dẫn của bạn.
JulianSoto

Đối với phiên bản đồng bộfs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (đường dẫn, gọi lại)
  2. fs.rename (cũ, mới, gọi lại)

Đi xuyên qua http://nodejs.org/api/fs.html

Một điều quan trọng - bạn cũng có thể sử dụng các chức năng đồng bộ hóa. (Nó sẽ hoạt động giống như chương trình C)


7

Để đổi tên đồng bộ, hãy sử dụng fs.renameSync

fs.renameSync('/path/to/Afghanistan.png', '/path/to/AF.png');

2

Đối với hệ điều hành linux / unix, bạn có thể sử dụng cú pháp shell

const shell = require('child_process').execSync ; 

const currentPath= `/path/to/name.png`;
const newPath= `/path/to/another_name.png`;

shell(`mv ${currentPath} ${newPath}`);

Đó là nó!


1
Có một lý do tại sao điều này sẽ được ưu tiên hơn fs.rename?
electrovir

Nó đồng bộ - Nhưng có thể sử dụng nodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath
Ole
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.