Shell 脚本:将多个文件夹中的第一个文件复制到一个文件夹中

Apr*_*cot 5 bash file-copy

在一个目录中,我有数百个子目录。每个子目录都有数百张jpg图片。如果文件夹名为“ABC_DEF”,则文件夹内的文件将被称为“ABC_DEF-001.jpg”、“ABC_DEF-002.jpg”,依此类推。

例如:

---Main Directory
------Sub-Directory ABC_DEF
----------ABC_DEF-001.jpg
----------ABC_DEF-002.jpg
------Sub-Directory ABC_GHI
----------ABC_GHI-001.jpg
----------ABC_GHI-002.jpg
Run Code Online (Sandbox Code Playgroud)

从每个子目录中,我只想将第一个文件(例如,扩展名为 -001.jpg 的文件)复制到名为 DESTDIR 的公共目标文件夹中。

我已经更改了此处给出的代码以适合我的用例。但是,它总是将第一个目录与文件名一起打印,我无法将文件复制到所需的目的地。以下是代码:

DIR=/var/www/html/beeinfo.org/resources/videos/
find "$DIR" -type d |
while read d;
do
    files=$(ls -t "$d" | sed -n '1h; $ { s/\n/,/g; p }')
    printf '%s,%s\n' "$files";
done
Run Code Online (Sandbox Code Playgroud)

我该如何修复此代码?

Phi*_*pos 5

为什么find当所有文件都在相同深度的目录中时?

cd "$DIR"
cp */*-001.jpg /destination/path
Run Code Online (Sandbox Code Playgroud)

  • @igal - 提防这个解决方案的 [限制](https://unix.stackexchange.com/q/110282) ......根据 OP,该 glob 将扩展到只有数百个文件名,但仍然存在要记住。 (2认同)