我一直在努力解决这个问题。这是我的文件的示例:
~/download/Video/CE/
~/download/Video/CE/153
~/download/Video/CE/153/2022-03-04
~/download/Video/CE/153/2022-03-05
~/download/Video/CE/281
~/download/Video/CE/281/2022-03-04
~/download/Video/CE/281/2022-03-05
~/download/Video/GA/
~/download/Video/GA/154
~/download/Video/GA/154/2022-03-04
~/download/Video/GA/154/2022-03-05
~/download/Video/GA/615
~/download/Video/GA/615/2022-03-04
~/download/Video/GA/615/2022-03-05
...etc
/download/Video 中有几十个文件夹,/download/video/*/ 中有几百个文件夹
我正在尝试将包含“2022-03-04”的所有文件夹及其所有内容移动到新目录中。我想要的结果是:
/mnt/d/archive/Video/CE/153/2022-03-04
/mnt/d/archive/Video/CE/281/2022-03-04
/mnt/d/archive/Video/GA/154/2022-03-04
...etc
我尝试了各种方法,但我最大的问题是我不能简单地将视频文件夹移动到 /mnt/d/archive,因为我想将 2022-03-05 文件夹(和超级目录)保留在主驱动器上。
这是我到目前为止所尝试过的:
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 /mnt/d/archive/Video/CE/$subdir/; done;
^ 然后只需复制并粘贴 GA 的代码以及 /Video/ 中的所有其他子目录
这创建了以下内容:
/mnt/d/archive/Video/CE/153/file.mp4
/mnt/d/archive/Video/CE/153/file2.mp4
/mnt/d/archive/Video/CE/281/file.mp4
...etc
这很棒,只是它不复制“2022-03-04”文件夹本身。我需要 2022-03-04 文件夹。所以我尝试了这个代码:
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 ~/mnt/d/archive/Video/CE/$subdir/2022-03-04; done;
然而,现在我遇到了另一个问题。这次没有复制任何文件夹或文件。我刚刚收到“没有这样的文件或目录”错误。
有任何想法吗?
答案1
我的选择是 tar 因为它很快。
(cd ~/download/Video && find . -type d -name 2022-03-04 | tar -T - -cpf - --remove-files | tar -C "/mnt/d/archive/Video/" -xpf -)
答案2
如果我正确理解你的问题,这样的事情应该有效:
cd ~/download/Video
for i in $(find * -type d -name '2022-03-04'); do
mkdir -p /mnt/d/archive/Video/"$i"
mv "$i"/* /mnt/d/archive/Video/"$i" && rm -r "$i"
done
这会:
- 查找所有名为“2022-03-04”的目录。
- 根据需要在存档位置重新创建目录树。
- 将‘2022-03-04’的内容移动到对应的归档目录,并删除原来的‘2022-03-04’目录。
(标准免责声明,如果文件名包含奇怪的字符,这将中断)