【问题标题】:Linux moving or copying multiple files with a shellLinux 使用 shell 移动或复制多个文件
【发布时间】:2017-12-13 00:38:53
【问题描述】:

我正在尝试将所有带有 .txt 扩展名的文件复制到一个新文件夹中,但我不确定如何使用一个命令来执行此操作。现在我只是在输入:

cp 文件1 文件2 文件3 /文件夹

但我认为有更好的方法,因为所有人的结局都是一样的?还有一种方法可以复制一组 .txt 文件并添加到它们的名称中吗?例如,如果我想将 .backup 附加到所有文件但将它们保存在同一目录中?

例如 file.txt 将被复制并重命名为 file.txt.backup(适用于具有相同 .txt 扩展名的多个文件)

【问题讨论】:

  • cp *txt /文件夹
  • 要将所有带有 .txt 扩展名的文件复制到一个新文件夹中,请使用命令 cp,cp -r *.txt /new_folder_path
  • 并在同一目录中创建它们的备份使用 mv mv *.txt *.txt.bk
  • @SyedSaadAhmed - 不,mv 不是这样工作的。
  • 您可以使用通配符进行选择。将尾随 / 添加到最后一个参数可确保您不会不小心将它们全部写入同一个文件,但 cp 不像以前那么愚蠢。如果您想为特定的文件扩展名递归地执行它,它会有点混乱 - 如果您想重新创建文件夹结构更是如此 - 您可能需要查看 find 命令。

标签: linux shell


【解决方案1】:

cp *.txt /dest/dir/ 呢?

对于添加.backup,您还可以执行如下所示的循环:

for i in *.txt
do
    cp "$i" "/dest/dir/$i.backup"
done

【讨论】:

  • @Alfe 双引号真的有必要吗?在我看来不是。
  • 是的,对于名称中包含空格的文件。经常被遗忘。试试这个:date > 'a b.txt'; for i in *.txt; do cp $i ./wherever/; done。这将引发错误,因为它会尝试复制名为 a 而不是 a b.txt 的文件。
  • @Alfe 哦!的确,我的坏。感谢您当时的编辑,现在听起来真的很相关。
  • @vmonteco 是 bash 脚本中的第二部分?
  • @User965 可以,但也可以直接在 CLI 中输入。
【解决方案2】:

至于重命名每个文件,大多数发行版都有一个rename 命令专门用于此目的。如果尚未安装,它应该可以通过您的包管理器获得。

不过,我发现它在不同发行版之间的工作方式有所不同。 man rename 了解您的口味如何发挥作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多