gpt4 book ai didi

bash 根据真实文件创建虚拟文件和文件夹

转载 作者:行者123 更新时间:2023-12-04 22:55:05 27 4
gpt4 key购买 nike

所以我需要一个简单的 bash 脚本来根据实际文件夹的内容创建虚拟文件和文件夹。这是我到目前为止得到的

dir=/mnt/TV
dummy_dir=/home/bob/Desktop/dummy

for d in `ls $dir`; do
mkdir "$dummy_dir/$(basename $d)"
done
for f in `ls -a $dir`; do
touch "$dummy_dir/$(basename $f)"
done

但它不能正常工作..谢谢

最佳答案

与使用 `cmd` 不同,$(cmd) 是新样式,应该尽可能使用,它更清晰,也可以嵌套。但是我不会使用任何一个。

我怀疑你遇到的问题与你的 mkdir 有关,它要求在创建基础目录之前存在所有顶级目录,即

mkdir /tmp/path/here 

要求/tmp/path 存在,除非您使用 -p 标志,无论当前存在什么,它都会创建整个树。

您会发现的另一个问题是隐藏文件和目录将被创建为文件,非隐藏文件和目录将被创建为目录,无论原始目录中的文件类型如何。

执行此操作的更好方法是使用查找。例如

dir=/mnt/TV
dummy_dir=/home/bob/Desktop/dummy

find $dir -type d -printf '%P\n' | \
while read dir; do
[[ -d "$dummy_dir/$dir" ]] || mkdir -p "$dummy_dir/$dir"
done

find $dir -type f -printf '%P\n' | \
while read file; do
[[ -f "$dummy_dir/$file" ]] || touch "$dummy_dir/$file"
done

第一个 find 命令将打印出所有 $dir 子目录的相对于 $dir 的路径。然后将它们传送到 while 循环中,该循环测试目录是否存在于 dummy_dir 中,如果不存在则创建它。

第二个查找命令将对文件执行相同的操作。

注意:这将完全忽略符号链接(symbolic link)套接字或任何其他不是目录或常规文件的文件。

如果这不能满足您的要求,请更新您的问题以包含更多详细信息。

关于bash 根据真实文件创建虚拟文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316565/

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