shell 使用FIND命令在文件名后追加源文件夹

olhwl3o2  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(186)

我需要从多个目录中剥离文件,这些目录都具有相同的文件名a.txt。差异来自父文件夹,因此
示例1\a.txt示例2\a.txt ...
因此,我希望运行一个FIND命令,该命令将捕获a.txt,但不会在文件从一个文件夹移动到另一个文件夹时覆盖该文件。因此,输出将为
示例1_a.txt示例2_a.txt
所以从另一篇文章中我想要的FIND命令如下

find . -name "a.txt" -execdir echo cp -v {} /path/to/dest/ \;

所以我想以某种方式修改以将源文件夹附加到文件中。所以我的猜测是以某种方式操纵{}来完成这一操作。
先谢了

zazmityj

zazmityj1#

一行可能是可行的,但您可以使用以下代码:

#!/bin/bash

targetprefix="targetdir"
find . -name "a.txt" -print0 | while read -r -d '' line
do
    path=$(dirname "$line")
    newpath=$(echo "${path#./}" | tr '/' '_')
    target="$targetprefix/$newpath"
    
    filename=$(basename "$line")
    
    cp -v $line $target/$filename
done
  • 将变量“targetprefix”更改为所需的目标目录。
  • find以及-print0while来自https://mywiki.wooledge.org/BashFAQ/001
  • 因为find的结果都以.“/"开头,所以我使用"${path#./}"来删除该前缀。
  • tr将所有后续的“/”替换为下划线。这将处理子目录
  • 警告:我没有测试所有“奇怪”的目录和文件名格式是否正确执行(如文件名中的回车符!)。

相关问题