【问题标题】:How to move and rename each file in folder to top folder? [linux shell] [bash]如何将文件夹中的每个文件移动和重命名为顶级文件夹? [Linux 外壳] [bash]
【发布时间】:2021-03-01 02:55:10
【问题描述】:

我正在尝试在 linux shell 中创建一个简单的脚本,在 folderX 中会遍历每个文件夹,重命名在那里找到的文件,并将它们移动到根 (folderX) 文件夹…… 我猜逻辑有点像这样:

-0> //in folderX
-0>for each folder == $folderY //just the last part, what comes after ~/folderX/[this]
    -1> cd ./$folderY
    -1> for each fileInY == $fileInY //just the last part, what comes after ~/folderX/folderY/[this.something]
        -2> rename fileInY = "$folderY - $fileInY"
    -1> move * to folderX
    -1> cd..

(但赞赏建议和不同的方法)

提前致谢! -Gabix

【问题讨论】:

  • 您应该能够通过使用 -exec 的单个 find 命令来完成此操作。

标签: bash file directory rename move


【解决方案1】:
folder="folderX"
find "$folder" -type f -exec cp '{}' '{}'.bak \; -exec mv '{}'.bak "$folder" \;

在变量文件夹中设置根文件夹/目录,然后使用它来运行查找然后执行。在目录结构中查找文件,先将文件名复制到文件名后面加“.bak”,然后将文件从目录中移动到根文件夹/目录

【讨论】:

  • 谢谢!!你能描述一下这个过程是如何工作的吗?,我猜 -type f 说作为 find cmd 中的一个函数遍历每个文件夹......但是 '{}' 及其他我不明白...... '{}' 是否在 find cmd 的 return 中描述 *(每个文件和文件夹)?然后将所有内容存储在 temp.bak 文件中(有点像zip),然后解压全部重命名的过程?
  • 没有压缩。找到的文件被简单地复制/重命名为另一个同名文件,后跟 .bak 在一个 exec 命令中,即测试到 test.bak。在第二个 exec 命令中,这个 .bak 文件然后被移回根目录。
  • 太棒了!我不是在暗示压缩,只是我理解和解释这个过程的方式,......以及脚本部分?我想在 myMoveToTopCmd.sh 中有这个... sh 是否获取输入变量?我可以从某个地方调用这个脚本,然后调用 >sh myMoveToTopCmd.sh -"/my/root/folder/where/to/start/moving/stuff"
  • 您可以将命令添加到脚本中,然后使用 $1 而不是 $folder。 $1 表示传递给脚本的第一个参数。
  • 我有点迷失了 \ 和 / ... \ 不是意味着它将所有内容发送到我的根目录吗?或者因为它是 \,而不是 /,所以所有内容都将发送到 $folder ($1) 而不是我的 -total- 根目录。
猜你喜欢
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2023-03-22
  • 1970-01-01
  • 2013-06-27
  • 2011-01-04
  • 1970-01-01
相关资源
最近更新 更多