【发布时间】:2020-11-05 01:42:15
【问题描述】:
如何将文件从源目录移动到目标目录,而目标目录保持源目录的原始目录结构?
例如,给定源目录
source
├── source_sub
│ ├── ex_one.txt
│ ├── ex_two.sh
│ ├── source_sub_sub
| │ ├── ex_three.txt
| │ ├── ex_four.sh
│ ├── source_unmoved_dir
| │ ├── ex_five.sh
我想将所有文本文件从源目录移动到目标目录,结果如下:
destination
├── source_sub
│ ├── ex_one.txt
│ ├── source_sub_sub
| │ ├── ex_three.txt
在目标中,名为source_unmoved_dir 的源目录不会移动,因为它不包含任何.txt 文件。
到目前为止,我正在遍历源代码中的所有文件和目录。当我遇到一个文件时,我只需使用mv $file $dest 移动它。对于目录,我只提出了这个mv $file $dest/。这将递归地将目录和子目录从源移动到目标。但是,它也会移动目录及其子目录中的每个文件。我不知道如何只在目录/子目录中添加.txt文件。
到目前为止,这是我的脚本:
for file in "$src"/*; do
if [[ -d $file ]]; then
mv $file $dest
elif [[ -f $file ]]; then
if [[ $file == *.txt ]]; then
mv $file $dest
fi
fi
done
【问题讨论】:
-
如果这是“一次性”,我只会 1) 将我想要移动的文件/目录转储到文本文件中,2) 找到具有“块模式”的编辑器,3)将最左边的列设置为
mv,4) 将右列阻止编辑到您希望该行上的文件移动到的任何目录路径,5) 当您满意时执行脚本。即使您有数百个文件,它也可能比想一个“聪明”的方式来做这件事更快/更容易。还有一个LOT“更安全”(“聪明”脚本中的一个错误很容易破坏您的文件系统)。 -
其实很巧妙。我会努力做到的。