我正在尝试复制文件夹内的所有文件/目录,但想排除一个文件夹,因为我希望所有其他文件都位于该文件夹内。为了更好地演示下面是文件夹结构
- VideosFolder
L File1
L File2
L File3
L TutorialFolder
现在我想File1
File2
File3
被感动成TutorialFolder
这样
- VideosFolder
L TutorialFolder
L File1
L File2
L File3
我尝试了这个命令
mv ~/Desktop/VideosFolder/!(TutorialFolder) TutorialFolder
但我收到这个错误
mv:无法统计“/home/user/Desktop/VideosFolder/!(TutorialFolder)”:没有这样的文件或目录
我检查了是否shopt extglob
已启用并且确实已启用。所以我不知道该怎么做。
答案1
你可以直接跑
mv * TutorialFolder/
而在VideosFolder/
。这会将所有文件和目录(不以 开头.
)移动到TutorialFolder/
.由于您无法将目录移入其自身,因此您可能会收到类似以下内容的警告消息:
mv: cannot move 'TutorialFolder' to a subdirectory of itself, 'TutorialFolder/TutorialFolder'
这是预料之中的,只是意味着mv
尚未移动TutorialFolder
。
答案2
您可以尝试 Rsync 命令。Rsync 是一个快速且多功能的命令行实用程序,可通过远程 shell 在两个位置之间同步文件和文件夹。
rsync -a --exclude 'TutorialFolder' ~/Desktop/VideosFolder/ ~/Desktop/VideosFolder/TutorialFolder/
答案3
另一个答案有效,但这是一种更干净的方法,假设您在里面,不会出现错误VideosFolder
:
find . -maxdepth 1 ! \( -name TutorialFolder -o -name '.' \) -exec mv {} TutorialFolder/ \;
这将找到当前目录中名称不等于TutorialFolder
and .
(当前目录本身)的每个文件和目录,然后将它们-exec
用于.mv
TutorialFolder