linux - 移动文件并在 Bash 上包含它的目录后重命名它

标签 linux bash

我正在尝试学习 Linux 上的 bash,只是为了好玩。我认为拥有一个可以将类似文件组合在一起的 .sh 会非常有用。例如,假设我们有目录

/主页/文档/

目录内有/mathdocs/、/codingdocs/等

在所有这些子目录中,我们都有 doc.txt。子目录中所有文件的名称相同。

假设我想将它们组合在一起,我想将所有文件移动到/home/allthedocs/并根据它们所在的目录重命名它们。(mathdocs.txt、codingdocs.txt 等)

我该怎么做?

我已经尝试基于 ls 和 cp 命令创建一个脚本,但我不知道如何在移动文件后获取目录名称以重命名其中的文件。我猜它必须是某种迭代语句(对于 Y 目录上的 X),但我不知道该怎么做。

最佳答案

您可以使用 mv 一次性移动和重命名您的文件,循环通过一个 glob 抓取所有文件:

#!/bin/bash

dest_dir=/home/allthedocs

cd /home/docs
for file in */doc.txt; do
  [[ -f "$file" ]] || continue # skip if not a regular file
  dir="${file%/*}"             # get the dir name from path
  mv "$file" "$dest_dir/$dir.txt"
done

查看这篇文章了解更多信息:

关于linux - 移动文件并在 Bash 上包含它的目录后重命名它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488701/

相关文章:

c - 指针和 printf

linux - 如何为 pthreads 中的锁定互斥锁获取拥有线程的线程 ID

linux - Cat 命令给出 "No such file or directory"

linux - 在没有临时文件的情况下使用命令的输出作为 `paste` 输入

bash - 将 bash 函数的返回值评估为整数

linux - 图像处理管道中已安装卷的文件权限?

linux - 在linux中访问awk外部的变量

c - 将库中的专用 ELF 部分合并到应用程序专用 ELF 部分

bash - 真正的 bash 行数

python - 在shell脚本中捕获python脚本抛出的异常