[英]In bash, Find, Sort and Copy
我正在嘗試對包含許多文件夾和文件的文件夾進行搜索。 我想找到最新的 20 個快速時間並復制到特定目錄“New_Directory”。
到目前為止,我得到了這個:
find . -type f -name '*.mov' -print0 | xargs -0 ls -dtl | head -20 | xargs -I{} echo {}
這會找到我的文件並使用大小/日期/名稱(以 ./ 開頭)打印它們
但是,如果我將命令更改為此(在末尾添加 cp):
find . -type f -name '*.mov' -print0 | xargs -0 ls -dtl | head -20 | xargs -I{} cp {} /Volume/New_Directory/
我得到錯誤:
cp: illegal option -- w
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
cp: illegal option -- w
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
.... (20 times)
我在 mac OS 上使用終端。
請建議如何解決此問題或建議更好的方法。 謝謝你。
嘗試解構你的管道,看看發生了什么。
find . -type f -name '*.mov' -print0 | xargs -0 ls -dtl | head -20 |
為您提供 20 個最新mov
文件的列表。 丟失的樣子:
-rw-r--r-- 1 ljm users 12449464 Jan 10 16:24 ./05ED-E769/DCIM/215___01/IMG_5902.mov
-rw-r--r-- 1 ljm users 14153909 Jan 10 16:00 ./05ED-E769/DCIM/215___01/IMG_5901.mov
-rw-r--r-- 1 ljm users 13819624 Jan 10 15:58 ./05ED-E769/DCIM/215___01/IMG_5900.mov
因此,您的xargs|cp
會將其作為輸入。
這將是
cp -rw-r--r-- 1 ljm users 13819624 Jan 10 15:58 ./05ED-E769/DCIM/215___01/IMG_5900.mov /Volume/New_Directory/
如果我們查看您的錯誤消息,
cp: illegal option -- w
cp -r
沒問題, cp -rw
會產生這個信息。 所以這與我所說的一致。
所以,問題是為什么-l
在副本中。 如果您刪除長格式,您將得到您所需要的。
作為旁注,為什么ls -d
,如果您的find
確保-type f
?
find . -type f -name '*.mov' -print0 | xargs -0 ls -t | head -20 | xargs -I{} cp {} /Volume/New_Directory/
應該做你想做的事,但請記住,你正在解析ls
的 output ,這被認為不是一個好主意。
就個人而言,我會
find . -type f -printf "%T@ %p\n" |
sort -n |
cut -d' ' -f 2- |
tail -n 20 |
xargs -I{} cp {} /Volume/New_Directory/
你使用下面的腳本。
find . -type f -name '*.mov' | ls -1t | head -n 20 |
xargs -n 1 -I {} realpath {} |
xargs -n 1 -I {} cp {} /Volume/New_Directory/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.