我正在尝试学习 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/