如何从目录结构创建文件

如何从目录结构创建文件

我有以下目录结构:

lib- 
    |-filled
            |-A4MpFILLED.svelte
            |-A5KFILLED.svelte
            |- // more files
    |-outlined
            |-A4MpOUTLINED.svelte
            |-A5KOUTLINED.svelte
            |- // more files
    |-round
            |-A4MpROUND.svelte
            |-A5KROUND.svelte
            |- // more files
    |-sharp 
            |-Add_cardSHARP.svelte
            |-Add_homeSHARP.svelte
            |- // more files

根据此结构,我想创建一个包含以下内容的 index.js 文件。

export { default as A4MpFILLED } from './filled/A4MpFILLED.svelte';
export { default as A5KFILLED } from './filled/A5KFILLED.svelte';
// more lines
export { default as A4MpOUTLINED } from './outlined/A4MpOUTLINED.svelte';
export { default as A5KOUTLINED } from './outlined/A5KOUTLINED.svelte';
// more lines
export { default as A4MpROUND } from './round/A4MpROUND.svelte';
export { default as A5KROUND } from './round/A5KROUND.svelte';
// more lines
export { default as Add_cardSHARP } from './sharp/Add_cardSHARP.svelte';
export { default as Add_homeSHARP } from './sharp/Add_homeSHARP.svelte';
// more lines

所有文件名都是唯一的,因为在文件名末尾添加了目录名,例如 A4MpFILLED、A4MpOUTLINED 等。

我怎样才能使用 bash 做到这一点?

我从以下内容开始,但我不确定此后如何继续。

# list file names
find . -type f '(' -name '*.svelte' ')' > index1
# remove ./ from each line
sed 's|.*/||' index1 > index2
# create a names.txt
sed 's|.svelte||' index2 > names.txt

请解释一下您的代码的作用。我也想学。

答案1

假设您的文件名之前没有换行符或更多点.svelte

cd lib && find . -type f -name '*.svelte' | sort | awk -F'[/.]' '{
    print "export { default as " $(NF-1) " } from \047" $0 "\047;"
}' > my/path/to/index.js

或者

cd lib && printf '%s\n' ./*/*.svelte | awk -F'[/.]' '{
    print "export { default as " $(NF-1) " } from \047" $0 "\047;"
}' > my/path/to/index.js

(文件名已经排序)

相关内容