입력은 경로 목록입니다. 첫 번째 디렉터리를 제외한 모든 항목은 무시/제거되어야 합니다.
예를 들어, 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로 솔루션을 작성했습니다. 라이브러리를 사용하여 opencsv
CSV 파일에서 경로를 읽습니다.
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