linux - 从具有父目录的每个子文件夹复制特定文件

标签 linux bash shell debian

我需要一种循环遍历大目录 (/home/data/playerdata/) 中子目录的方法,以便获取特定文件,同时保留我尝试获取的特定文件的父文件夹名称。

我基本上需要这个来从备份中恢复一个特定的文件。

示例:

要循环的主目录 = /home/minecraft/survival1/plugins/Sur​​vival/playerdata/

我要恢复的特定文件的路径 = /home/minecraft/survival1/plugins/Sur​​vival/playerdata/004fc15d-294c-4a42-a1af-1206c148e39b/economy.yml

脚本循环执行的示例命令 = cp/home/minecraft/survival1/plugins/Sur​​vival/playerdata/004fc15d-294c-4a42-a1af-1206c148e39b/economy.yml/restored/playerdata/004fc15d- 294c-4a42-a1af-1206c148e39b/economy.yml

我需要一个脚本来遍历“playerdata”目录中的每个文件夹(UUID 位)并复制该特定文件,同时保留其 UUID 父文件夹。

这是我到目前为止尝试过的:

 for FILE in $BASEDIR
        cp $BASEDIR/FILE/economy.yml /home/restored/FILE/economy.yml

这是在 Debian 服务器上运行

最佳答案

我建议为此使用 find:

cd /home/minecraft/survival1/plugins/Survival/playerdata/
find -name "economy.yml" -exec cp --parents {} /home/minecraft/restore/ \; 

--parents 复制时保存目录结构。

或者像您尝试的那样使用 for 循环:

find . -type f -print0 | while IFS= read -r -d '' filename;
do 
  mkdir --parents "$RESTOREDIR/$player"
  cp "$BASEDIR/$player/economy.yml" "$RESTOREDIR/$player/economy.yml"
done

关于linux - 从具有父目录的每个子文件夹复制特定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55222593/

相关文章:

linux - Socat - 如何创建一个 Windows 反向 shell

linux - 通过 ssh 杀死远程进程

linux - 在 unix/linux 中格式化日期

c - 有没有办法将 Linux 管道设置为非缓冲或行缓冲?

linux - cassandra如何能够通过硬链接(hard link)执行快照?

linux - 如何知道命令在 linux 中运行的位置

c - 子进程的进程父 ID 与父进程的 PID 不同

linux - 有没有办法在手册页中查找标志?

linux - 如何检查权限是否不超过多个文件中的特定级别?

shell - hadoop shell命令非常慢