簡體   English   中英

如何移動/復制目錄中的很多文件(不是所有文件)?

[英]How to move/copy a lot of files (not all files) in a directory?

我得到一個包含大約9000個文件的目錄,文件名以升序排列(但是不一定是連續的)。

現在,我需要將約3000個文件從編號xxxx復制/移動到yyyy到另一個目錄。 我該如何使用cp或mv命令呢?

find -type f | while read file; do if [ "$file" -ge xxxx -o "$file" -le yyyy ]; then echo $file; fi; done | xargs cp -t /destination/

如果要限制為3000個文件,請執行以下操作:

export i=0; find -type f | while read file; do if [ "$file" -ge xxxx -o "$file" -le yyyy ]; then echo $file; let i+=1; fi; if [ $i -gt 3000 ]; then break; fi; done | xargs cp -t /destination/

如果文件的數字后綴有公共后綴,請在if內使用$ {file %% suffix}(可以在后綴中使用glob)。

這不是最優雅的,但是類似:

cp 462[5-9] 46[3-9]? 4[7-9]?? 5??? 6[0-2]?? 63[0-4]? 635[0-3]  otherDirectory

這會將名為4625的文件復制到6353(含)到otherDirectory (你不會想用喜歡的事, 4* ,因為這將復制文件442483 ,等)

您可以使用seq實用程序為這種操作生成數字:

for i in `seq 4073 7843` ; do cp file_${i}_name.png /destination/folder ; done

不利的一面是,與QuantumMechanic的解決方案相比,這將更頻繁地執行cp 但是,如果所有文件名的總長度大於內核的argv大小限制(可能在128K和2048K之間,具體取決於內核版本和堆棧大小rlimits;有關詳細信息,請參閱execve(2) ,但QuantumMechanic的解決方案可能不會執行。 。

如果您想要的范圍跨幾個數量級(例如,介於9001010之間),那么seq -w選項可能有用,它將輸出數字零填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM