假设我有一个目录,我需要递归遍历,查找某个类型的每个文件(* .jpeg),并用一个唯一文件(placeholder.jpeg)替换每个匹配的事件但是我想保留原始文件名
我用一个小的占位符图像替换大型目录结构中的所有jpeg图像,但我需要保持原始文件名不变。
这是一个递归的find-file-by-type-and-replace,但保留原始文件名。
这几乎可以起作用:
#! /bin/bash
shopt -s globstar
for f in /tmp/**/*.jpeg
do
cp /tmp/placeholder.jpeg $f
done
答案 0 :(得分:1)
我不清楚你的占位符文件总是在你正在进行替换的目录结构之外。
各种find
版本都有一个-samefile
选项来检测特定文件,因此您可以避免调用cp
来发出“...是同一个文件”警告:
find /tmp \
-name '*.jpeg' ! -samefile /tmp/placeholder.jpeg \
-exec cp /tmp/placeholder.jpeg {} \;
您可以通过将-exec cp ...
替换为-exec echo cp ...
进行测试,以便在不执行此操作的情况下查看预期的副本。
答案 1 :(得分:0)
试试这个:find /tmp/ -name \*.jpeg -print0 | xargs -0I'{}' cp placeholder.jpeg {}