Linux Bash:将多个不同的文件移动到同一个目录中

39

作为一个相对新手的Linux用户,我似乎找不到如何做到这一点。 我正在尝试将一个目录中的所有唯一文件移动到另一个目录中。 例如:

$ ls
vehicle car.txt bicycle.txt airplane.html train.docx (more files)

我想要把car.txt、bicycle.txt、airplane.html和train.docx都放进vehicle里面。

目前,我是通过逐个移动文件来完成的:

$ mv car.txt vehicle
$ mv bicycle.txt vehicle
...

我该如何用一行代码完成这个操作?


1
请向您的系统管理员咨询或访问超级用户进行提问。Stack Overflow是一个面向专业和爱好者程序员的问答网站。 - Cyrus
2
@Cyrus:你混淆了“谁”和“什么”。StackOverflow不是一个面向“专业和热爱编程的程序员”的网站,它是一个关于编程问题的提问网站,涉及相关主题,尽管像你提到的那种程序员可能占据很大比例。 - Richard
1
@Richard:来源:http://stackoverflow.com/tour - Cyrus
12
@Cyrus: 我也不同意那个措辞,以及任何可能排除那些没有按你所建议的方式自我认同的人的措辞。 "专业和爱好者程序员"这个措辞尤其搭配上“问问你的系统管理员”是有点轻蔑的。它传达了“你不受欢迎”的信息,而不是“你的问题更适合其他论坛”。 - Richard
5个回答

64

你能做到

mv car.txt bicycle.txt vehicle/

(注意上面的/是不必要的,我只包含它以确保vehicle是一个目录。)

您可以按照以下方式进行测试:

cd               #Move to home directory
mkdir temp       #Make a temporary directory
touch a b c d    #Make test (empty) files ('touch' also updates the modification date of an existing file to the current time)
ls               #Verify everything is there
mv a b c d temp/ #Move files into temp
ls               #See? They are gone.
ls temp/         #Oh, there they are!
rm -rf temp/     #DESTROY (Be very, very careful with this command)

4
太好了!谢谢你,理查德!一步一步地学习。 - Conner
1
很高兴能帮助你,@Kronus。如果这是你问题的最佳答案,或者你感到问题已经得到了满意的回答,请点击上下投票箭头旁边的大勾选标记来接受答案。 - Richard

13

简写命令移动所有 .txt 文件

你可以尝试使用通配符。在下面的代码中,* 将匹配所有文件名以 .txt.docx 结尾的文件,并将它们移动到vehicle文件夹。

mv *.txt *.docx vehicle/ 

如果您想将特定文件移动到一个目录中

mv car.txt bicycle.txt vehicle/

编辑: 如评论中所提到的,如果您手动移动文件,建议使用mv -i…命令,它会在目标文件已经存在时发出警告,并给您选择不覆盖它的选项。其他“文件销毁者”命令,如cp和rm,也有一个-i选项。


我已经意识到这一点,因此添加了“(更多文件)”。不过我的表述还不够明确。感谢您的分享! - Conner
1
@Kronus:如果你手动移动文件,我建议使用“mv -i...”,它会在目标文件已经存在的情况下警告你,让你选择不覆盖它。其他像cp和rm这样的“文件破坏者”命令也有-i选项。在你的.bashrc文件中为它们设置别名是很好的选择。 - codeforester
@codeforester 感谢您分享这些信息。对于那些不熟悉命令的新手来说,这非常有用 :)。 - Amit

4
在Linux中,“mv”命令允许我们将多个文件移动到另一个目录中。您需要做的就是写出您想要移动的每个文件的名称,用空格分隔。
以下命令可以帮助您:
mv car.txt bicycle.txt airplane.html train.docx vehicle 或者
mv car.txt bicycle.txt airplane.html train.docx vehicle/
这两个命令都可以使用。

2
您可以使用mv命令将多个文件移动到特定目录中。 在您的情况下,可以通过以下方式完成:
mv car.txt bicycle.txt airplane.html train.docx vehicle/

请注意,最后一条目标路径,除了mv以外的所有内容都是源。

另一个场景是,目标路径不在我们的目录中,那么我们必须选择绝对路径来代替vehicles/。

注意:绝对路径始终从/开始,这意味着我们正在从根目录遍历。


0

我编写了一个小的bash脚本,它可以使用mv和find命令将匹配模式的多个目录中匹配模式的多个文件移动到单个位置

#!/bin/bash

for i in $(find /path/info/*/*.fna -type f) # find files and return their path

do


        mv -iv $i -t ~/path/to/destination/directory # move files 

done
  1. $() 用于命令替换(换句话说,它会扩展其中的表达式)
  2. /*/ 用于匹配任何目录,可以将其替换为任何通配符表达式
  3. *.fna 用于查找任何具有 .fna 扩展名的文件
  4. -type f 用于获取所定位文件的完整路径信息
  5. mv 中的 -i 是在覆盖之前提示(以防万一通配符表达式有误需要额外小心)
  6. -v 用于详细模式
  7. -t 用于指定目标位置

注意:上述标志不是强制性的。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接