我有一个包含文件和文件夹的文件夹。
folder/file1.jpg
folder/file2.jpg
folder/file3.jpg
folder/subfolder1/file1.txt
folder/subfolder1/file2.txt
folder/subfolder2/file1.txt
folder/subfolder3/
destination/
我想将所有文件夹(及其内容)移动到新文件夹中,但不移动文件。
例如。
folder/file1.jpg
folder/file2.jpg
folder/file3.png
destination/subfolder1/file1.txt
destination/subfolder1/file2.txt
destination/subfolder2/file1.txt
destination/subfolder3/
我知道,如果我想选择所有 jpeg 文件(例如),我会这样做mv folder/*.jpg destination
。但是选择所有文件夹的命令是什么?
答案1
为此,您只需要在 * 末尾添加一个额外的 / ,如下所示:
mv folder/*.jpg destination (match only jpg files)
mv folder/* destination (match anything found)
mv folder/*/ destination (match only the folders)
这只会将“文件夹”内的文件夹移动到目标,而不是“文件夹”内的文件(请注意,子文件夹中的文件将被移动)。
答案2
如果子文件夹有统一的名称,您可以使用罗艾玛的回答。如果没有,您可以使用一个简单的 shell 循环:
mkdir -p destination
for name in folder/*; do
[ ! -d "$name" ] && continue
mv "$name" destination
done
这将循环遍历folder
(文件和目录等)中的所有目录条目,测试每个目录条目是否是目录,如果是,则移动它们。
另一种可能性是使用find
:
mkdir -p destination
find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination ';'
这将找到所有目录的所有路径名folder
(但不是下面的目录,也不是目录folder
本身),并将每个找到的目录移动到destination
.
答案3
根据实际的目录名称,您可以使用它
mv folder/subfolder* destination/
如果没有模式 ( subfolder*
) 来匹配文件夹名称,您可以这样做
find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination/ \;
甚至这个
find folder -mindepth 1 -maxdepth 1 -type d -exec mv -t destination/ {} +