경로 목록에서 디렉터리 목록을 만들고 각 디렉터리에 빈 텍스트 파일을 만듭니다.

경로 목록에서 디렉터리 목록을 만들고 각 디렉터리에 빈 텍스트 파일을 만듭니다.

입력은 경로 목록입니다. 첫 번째 디렉터리를 제외한 모든 항목은 무시/제거되어야 합니다.

예를 들어, dirnames 또는 dirs라는 텍스트 파일에는 다음 3줄의 텍스트가 입력됩니다.

/how-to-blah-blah/
/how-to-blah-blah-blah/
/how-to-blah-blah-blah/

스크립트를 실행하면 다음과 같은 디렉터리와 파일이 생성됩니다.

/how-to-blah-blah/file.txt
/how-to-blah-blah-blah/file.txt
/how-to-blah-blah-blah/file.txt

또는

입력하다

"/d1","d2/subd1/subd2","d3/subder1/","d3/subder1/file.jpg"

산출:

d1, d2, d3, d4라는 4개의 디렉터리가 생성되어야 하며 각 디렉터리 아래에 file.txt라는 파일이 생성되어야 합니다.

세 번의 시도. 그들 중 누구도 완전히 작동하지 않습니다.

첫 시도

for i in ${a[@]}
do
    folder=`dirname $i`
while [ "${folder:0:1}" = "/" ]
do
    folder=${folder:1}
done
echo -p $folder
done

for i in *
do
    if [ -d $i ]
    then
        touch ./$i/index.html
    fi
done

두 번째 시도

import os
from file (replace with actual file name)
with open('directory_list.txt', 'r') as f:
dir_list = f.read().split(',')

for dir_name in dir_list:

dir_name = dir_name.strip().strip('/')

if '/' not in dir_name:
    os.makedirs(dir_name, exist_ok=True)
    open(os.path.join(dir_name, 'blank_file.txt'), 'w').close()

세 번째 시도

import os

def create_directories_and_files(directory_list):
    for directory in directory_list:
        if not os.path.exists(directory):
            os.makedirs(directory)
    
        file = os.path.join(directory, "blank_file.txt")
        open(file, 'w').close()


directories = ["dir1", "dir2", "dir3"]
create_directories_and_files(directories)

답변1

Bash에서 이와 같은 작업을 수행할 수 있지만 그것이 얼마나 안정적인지는 잘 모르겠습니다. 시도해 볼 수 있는 한 가지는

#!/usr/bin/env bash

while IFS=',' read -ra dirs
  do for dir in "${dirs[@]}"
     do tmp="${dir//\"/}" # Get rid of double quotes
        tmp="${tmp#/*}" # Remove forward slash if it is somewhere in front of the string
        tmp="${tmp%%/*}" # Remove everything after the first `/` including
        mkdir -p "$tmp" && touch "$tmp/emptyfile"
     done
  done < dirs.csv

여기서는 문자열 작업을 사용하여 csv에서 문자열을 자르고 압축합니다.

이것이 도움이 되는지 확인하세요

답변2

저는 Java로 솔루션을 작성했습니다. 라이브러리를 사용하여 opencsvCSV 파일에서 경로를 읽습니다.

CSV 입력 파일 예:

여기에 이미지 설명을 입력하세요.

그런 다음 파일에서 모든 경로를 로드하면 불필요한 항목이 제거됩니다.

  • 이중 슬래시
  • 가리키다
  • 빈 문자열

이것은 내 자바 코드입니다.

// get user directory in your home pc
    File homeDir = new File(System.getProperty("user.home"));

// read CSV file as input
Reader reader = Files.newBufferedReader(Paths.get("inputPaths.csv"));

// read back slash also
CSVParser parser = new CSVParser(CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, '\0', CSVParser.DEFAULT_STRICT_QUOTES);

// skip 1 first line in 2nd parameter
CSVReader csvReader = new CSVReader(reader, 1, parser);

// load everything in CSV file
List<String[]> records = csvReader.readAll();
for (String[] record : records) {
    // replace double slashes from a path
    String newString = record[0].replaceAll("//", "/");
    // split path on forward slashes
    String[] folders = newString.split("/");
    String path = homeDir + "\\direcotories";
    for (String folder : folders) {
        // check if path is not empty and not contains a dot character
        if (!folder.isEmpty() && !folder.contains(".")) {
            path += ("\\" + folder); // concatenate complete path
        }
    }
    File theDir = new File(path);
    try {
        if (theDir.mkdirs()) { // create directories
            File emptyFile = new File(theDir, "\\file.txt");
            if (emptyFile.createNewFile()) { // create an empty file
                System.out.println("File created: " + emptyFile.getPath());
            } else {
                System.out.println("File already created: " + emptyFile.getPath());
            }
        }
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

출력 스크린샷:

여기에 이미지 설명을 입력하세요.

디렉토리 스크린샷 생성

여기에 이미지 설명을 입력하세요.

답변3

#!/bin/bash

file="dirnames"

while read line
do
    while [ "${line:0:1}" = "/" ]
    do
        line=${line:1}
    done
    mkdir -p $line
done < $file

for i in *
do
    if [ -d $i ]
    then
        touch ./$i/file.txt
    fi
done

관련 정보