File-Copy

從一個目錄中選擇 n 個隨機文件並將它們複製到另一個文件夾 + 其他具有相同但不同文件類型的文件

  • August 2, 2022

我有兩個目錄,我們稱它們為XY 在其中我有 100k+ 個文件,X中的 .jpg 文件和****Y中的.txt 文件

我想從X中隨機選擇****N 個文件並複製到文件夾Z

這應該可以使用 find + shuffle 進行管理。

然後我想在Y中找到與復製到Z的文件同名的所有文件,但它們是 .txt 文件並將它們複製到目錄W

視覺化:X >> Z中的 N 個文件****Y >> W 中的相同 N 個文件

我該怎麼做呢?

#!/bin/bash

X=/path/to/X
Y=/path/to/Y
Z=/path/to/Z

mapfile -d '' -t files < <(find "$X" -type f -name '*.jpg' -print0 |
                          shuf -z -n 10 -)

for f in "${files[@]}"; do
 echo cp "$f" "$Z"
 bn=$(basename "$f" ".jpg")
 echo cp "$Y/$bn.txt" "$Z"
done

這個腳本未經測試,但應該做一個你想要的預演。將XYZ變數設置為正確的值,然後執行它以查看它會做什麼,根據需要進行調整,當它根據需要工作時,echo從兩cp行中刪除 。

它首先$files使用目錄中的 10 個隨機 .jpg 文件名填充一個數組 () $X。它使用 NUL 作為文件名分隔符,因此可以處理任何文件名,甚至包括那些討厭的字元,如空格、製表符和 shell 元字元。

然後它遍歷這些文件名中的每一個,以 1. 將它們複製到 directory $Z, 2. 提取文件名的基本名稱部分, 3. 將基本名稱 +.txt從 directory複製$Y到 directory $Z

順便說一句,這需要 bash 版本 4.4-alpha(2015 年底發布)或更高版本,因為那是-d選項被添加到mapfile.

引用自:https://unix.stackexchange.com/questions/712106