gpt4 book ai didi

linux - 创建文件夹 bash 中每个子文件夹的文件列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:34 24 4
gpt4 key购买 nike

我在使用模板 *.cbf 在每个文件夹的任何子文件夹中创建文件列表时遇到问题。

我在 Shell 中编写了脚本。但它总是以“没有这样的文件或目录”退出。

路径结构如下/dir///*.cbf

#!/usr/bin/env bash
input_dir=$1
for i in `ls $input_dir/*/*/*_00001.cbf`; do
cbf=$(readlink -e $i)
cbf_fn=$(basename $cbf)
cbf_path=$(dirname $cbf)
cbf_path_p2=$(basename $cbf_path)
cbf_path_p1=$(basename $(dirname $cbf_path))
find `$input_dir/$cbf_path_p1/$cbf_path_p2` -name "*.cbf" -print > files.lst
done

最佳答案

主要原因是该目录可能不存在。我将检查您的代码:

假设您的input_dir/hoppa 并且您的链接是/hoppa/1/2/a_00001.cbf/hoppa/1/2/a_00001.cbf 是指向 /level1/level2/level3/filename.ext

的链接
for i in `ls $input_dir/*/*/*_00001.cbf`; do 

处理 ls 的输出通常不是一个好主意。此外,对于那些曾经使用 Fortran(打洞卡,啊那些日子......)的人来说,i 建议使用整数。 ffile 可能是更好的选择。因此,假设您的输入目录不包含空格,

for file in $input_dir/*/*/*_00001.cbf ; do
cbf=$(readlink -e $i)

(那些建议 find 的人可能错过了 readlink)

    cbf_fn=$(basename $cbf)      # cbf_fn=filename.ext
cbf_path=$(dirname $cbf) # cbf_path=/level1/level2/level3
cbf_path_p2=$(basename $cbf_path)
# cbf_path_p2=level3
cbf_path_p1=$(basename $(dirname $cbf_path))
# cbf_path_p1=level2
find `$input_dir/$cbf_path_p1/$cbf_path_p2` -name "*.cbf" -print > files.lst

因此查找将查找 /hoppa/level2/level3,一个可能不存在的目录。

done   

关于linux - 创建文件夹 bash 中每个子文件夹的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45352231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com