所以我需要一个简单的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
但它无法正常工作..谢谢
答案 0 :(得分:2)
而不是使用`cmd`
,$(cmd)
是新样式,如果可能应该使用,它更清晰,也可以嵌套。但是我也不会使用它们。
我怀疑你遇到的问题是你的mkdir,它要求在创建基础之前存在所有顶级目录,即
mkdir /tmp/path/here
除非你使用-p标志,否则需要/ tmp / path才能存在,无论当前存在什么,都会创建整个树。
您会发现另一个问题是隐藏文件和目录将被创建为文件,非隐藏文件和目录将被创建为目录,而不管原始目录中的文件类型。
更好的方法是使用find。例如
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中,如果不存在则创建它。
第二个find命令对文件也是如此。
注意:这将完全忽略sym链接套接字或任何其他不是目录或常规文件的文件。
如果这不符合您的要求,请更新您的问题以包含更多详细信息。
答案 1 :(得分:0)
cp -pvr /mnt/TV /home/bob/Desktop/dummy
如果您想要达到的目的不止于此,请在您的问题中指明。