3

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

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

4

2 回答 2

2

而不是使用`cmd`,$(cmd)是新样式,如果可能的话应该使用,它更清晰,也可以嵌套。但是我也不会使用。

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

mkdir /tmp/path/here 

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

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

更好的方法是使用 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 命令将对文件执行相同的操作。

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

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

于 2013-01-14T10:57:54.680 回答
0
cp -pvr /mnt/TV /home/bob/Desktop/dummy

If you are trying to achieve anything more than this, specify it in your question.

于 2013-01-14T11:12:27.187 回答