在这种情况下,我有 2 个文件夹,/ParentFolder/FolderName/Files.mp4 和 /Mount/FolderName/Files.mp4。
本质上,/ParentFolder 中的任何内容都需要替换 /mount 中具有相同名称的任何文件夹。我必须使用 ACDCLI 进行实际复制,因此我需要先通过调用 /ParentFolder/* 中的任何文件夹名称并 rm -rf /mount/"FolderName" 来删除这些文件夹
如果它是一个文件夹很容易,但我不确定如何说,从 X 获取所有文件夹名称,如果它们存在于 Y 中则删除。
答案1
我不确定这是否是你想要的。但要获取 X 中的所有文件夹名称,你可以执行以下操作:
find /some/directory -type d -print
在 Y 中重复此操作。当然,如果两个目录是: /ParentFolder/FolderName/Files.mp4
和/Mount/FolderName/Files.mp4
,那么请确保您cd
足够远,以便您已经移动过路径不同的部分。
因此,在第一个目录中,cd
进入/ParentFolder
。在第二种情况下,cd
进入/Mount
。
如果您在两个目录中都执行此操作,您将得到两个列表(我们将它们称为list1.txt
和list2.txt
),您可以将它们连接起来,排序,然后打印唯一的行:
cat list1.txt list2.txt | sort | uniq -u
这些是仅存在于一个列表中的目录。您可以将其存储在变量中:
unique_paths=`cat list1.txt list2.txt | sort | uniq -u | xargs`
然后迭代:
for my_path in ${unique_paths} ; do
if [ -e "/ParentFolder/${my_path}" ] ; then
## Do something to it
else
## This means it is in /Mount/, so do something else
fi
done
我自己还没有尝试过——所以请先测试一下。
另外,您可能希望查看 rsync 的手册页。其选项的某些组合可能会实现您想要的效果。