Linux: 移动文件时重新创建父目录

Linux: Recreate parent directories when moving files

在我的工作目录中,我有几个文件夹,其中包含数百个不同类型的文件(.txt、.csv、.png...)。这些文件夹的结构如下例所示:

myDir/
myDir/Folder_1/ ... file_1.txt, file_2.csv, file_3.txt
myDir/Folder_2/ ...
myDir/Folder_3/ ...
...

我需要将所有 .csv 文件移动到一个新目录,但要保持相同的目录树,如下所示:

myDir/
myDir/Folder_1/ ...
myDir/Folder_2/ ...
...
myDir/New/
myDir/New/Folder_1/ ... file_2.csv
myDir/New/Folder_2/ ...
...

我发现 cp 命令有 --parents 标志可以做我想做的事,但我不想复制这些文件,我只想移动它们。

我之前搜索过这个问题,找到了这个:Bash script for moving files and their parent directory

这和我需要做的很相似,但我无法理解。

检查以下代码段打印出的命令。如果他们按照您的意愿行事,则只需删除 echo(在 mkdirmv 之前)。

for path in myDir/*; do
  [[ -d "$path" ]] && echo mkdir -p "myDir/New/${path#myDir/}"
done

for csv in myDir/*/*.csv; do
  echo mv "$csv" "myDir/New/${csv#myDir/}"
done