File-Copy
從一個目錄中選擇 n 個隨機文件並將它們複製到另一個文件夾 + 其他具有相同但不同文件類型的文件
我有兩個目錄,我們稱它們為X和Y 在其中我有 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
這個腳本未經測試,但應該做一個你想要的預演。將
X
、Y
和Z
變數設置為正確的值,然後執行它以查看它會做什麼,根據需要進行調整,當它根據需要工作時,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
.