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

时间:2013-01-14 10:18:31

标签: bash loops replace

所以我需要一个简单的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

但它无法正常工作..谢谢

2 个答案:

答案 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

如果您想要达到的目的不止于此,请在您的问题中指明。