Maison > interface Web > js tutoriel > le corps du texte

Renommer le lot de fichiers de nœuds

php中世界最好的语言
Libérer: 2018-03-13 17:14:07
original
1552 Les gens l'ont consulté

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);
Copier après la connexion
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;);
});
Copier après la connexion
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;);
});
Copier après la connexion
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);
});
Copier après la connexion
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})
Copier après la connexion
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
Copier après la connexion
Créer un flux de lecture

let stream = fs.createReadStream(&#39;test.txt&#39;);
Copier après la connexion
Créer un flux d'écriture

let stream = fs.createWriteStreamr(&#39;test_copy.txt&#39;);
Copier après la connexion
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++;
    })
}
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!