使用 find + sed + cp 查找文件并将它们复制到不同名称的目录中

Jus*_*son 2 sed find cp

我试图将一堆名为 folder.jpg 的文件复制到一个文件夹中。问题是因为所有文件都命名为相同的东西,我需要在过程中重命名它们。我知道我可能可以用 sed 做到这一点,但我想将它们重命名为父文件夹的一部分的名称。这是我找到并复制文件所得到的

cp $(find . -iname "folder.jpg") .albumart/
Run Code Online (Sandbox Code Playgroud)

文件夹结构是 ./artist/artist.year.album/folder.jpg 以及我想使用父文件夹(或只是其中的一部分)来命名文件的内容。有人可以用一个班轮帮助我完成任务吗?更棘手的是,有些文件夹还有一层 CD1 和 CD2,如果它们存在,我想忽略它们(例如 ./artist/artist.year.album/CD1/folder.jpg)

jw0*_*013 5

假设您有bash,此版本仅采用您的文件夹结构(例如./foo/bar/baz/folder.jpg)并用下划线替换所有斜线(例如,您得到foo_bar_baz_folder.jpg):

find . -iname folder.jpg -exec bash -c 'for x; do x=${x#./}; cp -i "$x" ".albumart/${x//\//_}"; done' _ {} +
Run Code Online (Sandbox Code Playgroud)

请注意,无论您做什么,每当您将文件从多个位置移动到同一目的地时,总是有可能发生名称冲突。