如何将文件和目录移动到Linux中的父文件夹?


Answers:


66
找 。-maxdepth 1 -exec mv {} .. \;

这也将移动隐藏文件。

你会得到这样的信息:

mv:不能动'。' 到`../。':设备或资源忙

当它试图移动.(当前目录)但不会造成任何伤害。


1
它还将所有子目录中的所有文件移动到当前目录的父目录。我-maxdepth 1用来确定。
ℝaphink09年

1
现在它说:mv:不能移动./scripts' to ../scripts':目录不空

1
您必须在父目录和当前目录中有一个名为scripts的目录。在移动它之前,您必须重命名这个。
ℝaphink09年

1
它工作但你留下了一个非常重要的信息 - 你必须从子目录运行它。此外,这不会删除子目录本身,因此您必须备份一个目录并在子目录中执行rmdir。
工匠

89

我来到这里是因为我也是这个主题的新手。出于某种原因,上面没有为我做的伎俩。我将所有文件从目录移动到其父目录所做的是:

cd to/the/dir
mv * ../

12
这不会移动隐藏文件
Wavesailor 2015年

1班轮:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd

10

在shell中输入:

mv *.* ..

这会将所有文件移动一级。

角色*是通配符。因此,*.deb将移动所有.deb文件,并将Zeitgeist.*Zeitgeist.avi和Zeitgeist.srt移动一个文件夹,因为当然,这..表示父目录。

要移动包括文件夹等在内的所有内容,只需使用*而不是*.*


3
这与dirs不起作用!或隐藏文件

它适用于dirs,至少对我而言。
maaartinus 2011年

5
你想**.*包括目录
Chris S

这是一部很棒的纪录片
BlackBurn027 2016年

6

它不能比:

mv * ../

要移动隐藏文件:

mv /path/subfolder/{.,}* /path/ 

mv是一个移动文件的命令,*意味着所有文件和文件夹,../是父目录的路径。


2

在bash中你可以使用 shopt -s dotglob 来*匹配所有文件并简单地移动它们

shopt -s dotglob; mv * ..

这不是最佳解决方案,因为在您更改之前,设置对于shell是永久性的

shopt -u dotglob

但我觉得很高兴知道。


4
在子shell中调用它:(shopt -s dotglob && mv * ..)。这样,该选项只对该子shell本地。
Martin Ueding

很好的答案 - 它很简单,包含隐藏文件,不会导致复制'。'错误。和'..'
Daniel Howard

1

一种不会导致错误并且每次都有效的方法:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done

1
find . -maxdepth 2 -type f -exec mv {} .. \;

我使用上面的变体将子文件夹中的所有文件移动到父文件夹中。

我按年份在文件夹中获取数据,但通过使用元数据找到我可以将它们全部放在同一个文件夹中,这样可以更容易管理。

例如。

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3

0

假设所有隐藏文件都以点开头,后跟字母或数字(它们应该是),您可以使用

mv * .[A-Za-z0-9]* ..

.[A-Za-z0-9]*部分是为了确保你不会试图移动...沿着,这将失败。


0

将所有文件和文件夹移动到Linux中的父目录很简单。

转到该文件夹​​并使用此命令:

mv * /the full path

例如,如果您的文件和文件夹如下:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

通过cd转到该文件夹​​:

cd /home/abcuser/test
mv * /home/abcuser

您的所有文件和文件夹都将移动到abcuser文件夹(父目录)。


2
谢谢@Gareth,也差不多了。Abhishek,请不要发布任何不相关的链接,这是什么感觉?另外,请检查您的格式。另外,/the full path在Linux中不起作用,你必须使用转义空间/the\ full\ path
懒惰


0
find -type f|while read line; do mv $line ${line##*/}; done

谢谢你的回答。虽然这可能在简单的情况下工作,管道findwhile read是使用一个不错的方法find,以及更好的答案已经发布。
斯科特

-1

切换到子目录并执行以下命令以复制或移动文件。

例如:a是父目录,b是子目录,我们希望将所有文件从b移动/复制到(子目录到父目录)。

cd b
cp * ..
mv * ..

欢迎来到超级用户!这复制了另一个答案,并没有添加任何新内容。请不要发布答案,除非您确实有新的贡献。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.