Maison  >  Article  >  interface Web  >  Renommer le lot de fichiers de nœuds

Renommer le lot de fichiers de nœuds

php中世界最好的语言
php中世界最好的语言original
2018-03-13 17:14:071553parcourir

Cette fois, je vais vous présenter le renommage par lots des fichiers de nœuds. Quelles sont les précautions pour le renommage par lots des fichiers de nœuds. Ce qui suit est un cas pratique, jetons un coup d'œil.

Dans une exigence réelle, un lot de fichiers (tels que du texte, des images) doit être renommé et numéroté en fonction des numéros. J'ai juste profité de cette occasion pour me familiariser avec les opérations sur les fichiers fs du nœud et j'ai écrit un script pour modifier par lots les noms de fichiers.

Exigences

Les fichiers images suivants sont disponibles

Renommer le lot de fichiers de nœuds


Avant modification

Il est nécessaire de modifier les noms de fichiers par lots, de les changer en noms de préfixes unifiés et d'augmenter automatiquement l'index. L'effet après modification est


Après modification<.>

Renommer le lot de fichiers de nœuds

L'opération manuelle la plus simple est de renommer les fichiers un par un, mais conformément au principe DRY (Ne vous répétez pas), il est préférable d'écrire un script de nœud pour fais-le.

Recherche

Pour effectuer des opérations sur les fichiers dans le nœud, vous devez comprendre le module fs

Il existe deux manières de synchrone et d'asynchrone dans le module fs

Lire les fichiers

//异步fs.readFile(&#39;test.txt&#39;, &#39;utf-8&#39; (err, data) => {    if (err) {        throw err;
    }    console.log(data);
});//同步let data = fs.readFileSync(&#39;test.txt&#39;);console.log(data);
Paramètres du fichier de lecture asynchrone : chemin du fichier, méthode d'encodage,

Fonction de rappel

Écrire le fichier

fs.writeFile(&#39;test2.txt&#39;, &#39;this is text&#39;, { &#39;flag&#39;: &#39;w&#39; }, err => {    if (err) {        throw err;
    }    console.log(&#39;saved&#39;);
});
Paramètres d'écriture du fichier : fichier cible, contenu d'écriture, formulaire d'écriture, fonction de rappel

méthode d'écriture du drapeau :

r : lire le fichier

w : écrire le fichier

a : Ajouter

Créer le répertoire

fs.mkdir(&#39;dir&#39;, (err) => {    if (err) {        throw err;
    }    console.log(&#39;make dir success&#39;);
});
dir est le nom du nouveau répertoire

Lire le répertoire

fs.readdir(&#39;dir&#39;,(err, files) => {    if (err) {        throw err;
    }    console.log(files);
});
dir est le nom du répertoire lu, files est un tableau de fichiers ou de noms de répertoires sous le répertoire

Obtenir les informations sur les fichiers

fs.stat(&#39;test.txt&#39;, (err, stats)=> {    console.log(stats.isFile());         //true})
Méthode Stats après avoir obtenu les informations sur les fichiers :


Méthode

Description

stats.isFile()    是否为文件    
stats.isDirectory()    是否为目录    
stats.isBlockDevice()    是否为块设备    
stats.isCharacterDevice()    是否为字符设备    
stats.isSymbolicLink()    是否为软链接    
stats.isFIFO()    是否为UNIX FIFO命令管道    
stats.isSocket()    是否为Socket
Créer un flux de lecture

let stream = fs.createReadStream(&#39;test.txt&#39;);
Créer un flux d'écriture

let stream = fs.createWriteStreamr(&#39;test_copy.txt&#39;);
Développement

Idée de développement :

Lire le répertoire source

Juger si le répertoire de stockage existe, et créer un nouveau répertoire s'il n'existe pas

Copiez le fichier

Juger du contenu copié S'il faut créer un flux de lecture pour le fichier

Créer un flux d'écriture

tuyau de lien et écrire le contenu du fichier

let fs = require(&#39;fs&#39;),
    src = &#39;src&#39;,
    dist = &#39;dist&#39;,
    args = process.argv.slice(2),
    filename = &#39;image&#39;,
    index = 0;//show helpif (args.length === 0 || args[0].match(&#39;--help&#39;)) {    console.log(&#39;--help\n \t-src 文件源\n \t-dist 文件目标\n \t-n 文件名\n \t-i 文件名索引\n&#39;);    return false;
}
args.forEach((item, i) => {    if (item.match(&#39;-src&#39;)) {
        src = args[i + 1];
    } else if (item.match(&#39;-dist&#39;)) {
        dist = args[i + 1];
    } else if (item.match(&#39;-n&#39;)) {
        filename = args[i + 1];
    } else if (item.match(&#39;-i&#39;)) {
        index = args[i + 1];
    }
});
fs.readdir(src, (err, files) => {    if (err) {        console.log(err);
    } else {
        fs.exists(dist, exist => {            if (exist) {
                copyFile(files, src, dist, filename, index);
            } else {
                fs.mkdir(dist, () => {
                    copyFile(files, src, dist, filename, index);
                })
            }
        });
    }
});function copyFile(files, src, dist, filename, index) {
    files.forEach(n => {        let readStream,
            writeStream,
            arr = n.split(&#39;.&#39;),
            oldPath = src + &#39;/&#39; + n,
            newPath = dist + &#39;/&#39; + filename + index + &#39;.&#39; + arr[arr.length - 1];
        fs.stat(oldPath, (err, stats) => {            if (err) {                console.log(err);
            } else if (stats.isFile()) {
                readStream = fs.createReadStream(oldPath);
                writeStream = fs.createWriteStream(newPath);
                readStream.pipe(writeStream);
            }
        });
        index++;
    })
}
Je crois avoir lu le cas dans cet article. Vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Utiliser le code JS pour créer des effets de barrage

Utiliser le canevas H5 pour créer des effets de barrage

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn