我有一个主目录X,里面有许多子目录如A、B、C、D。我有一个主目录Y,里面也有许多同名子目录,如X主目录下的A、B、C、D。
现在我需要将X主目录下的文件移动到Y主目录相应的子目录中。
例如:
X主目录中,子目录A有100个文件,
子目录B有1个文件,
子目录C有5个文件,
子目录D有50个文件……
我的光标应该在主目录X处,从那里我需要将所有子目录文件移动到Y主目录中具有相同名称的子目录(A、B、C、D)中。
我要如何在SHELL脚本(KSH)或Unix中完成这项任务?
现在我需要将X主目录下的文件移动到Y主目录相应的子目录中。
例如:
X主目录中,子目录A有100个文件,
子目录B有1个文件,
子目录C有5个文件,
子目录D有50个文件……
我的光标应该在主目录X处,从那里我需要将所有子目录文件移动到Y主目录中具有相同名称的子目录(A、B、C、D)中。
我要如何在SHELL脚本(KSH)或Unix中完成这项任务?
while IFS= read line
来确保嵌入空格和其他 shell 元字符的文件名被正确处理。 除了寻找子目录名称的低效和绕路方式(使用find
代替),你不仅找到了 子 目录,而且找到了整个 子树 中的 所有 目录,这将在移动时失败,因为当你到达一个子子目录时,它已经被移动了。这可能不是 OP 案例中的问题(听起来似乎没有子子目录),但值得指出。 - mklement0*/
(注意末尾斜杠)将返回所有子目录(默认情况下排除隐藏的子目录)。至于双引号:是的,如果您想引用一个变量而不被shell解释,您必须使用双引号:"$var"
。没有双引号,$var
会受到单词拆分和路径名扩展(globbing)的影响。尝试以下内容:var='spaced out'; set -- $var; echo "Count of params: $#"
和var='A *'; echo $var
。 - mklement0