[英]How to use variable in filename within find command?
我正在嘗試使用 find 命令來收集具有變量名的文件作為標題的一部分,並將它們移動到另一個目錄。 它是一個表示數組的循環變量,就像這樣
for i in "${array[@]}"; do
find -name "${i}r.TXT" -a -name "${i}f.TXT" -execdir mv '{}' logs/ \;
done
我試圖將它們移動到的目錄是我當前工作目錄的子目錄,名為 logs。 將變量集成到文件名中以便 find 獲取正確的文件並將它們移動到日志目錄的正確方法是什么?
數組的元素是整數,如 50、55、60、65 等,我想要 50f、50r、55f、55r 等文件。
正如評論中所指出的, -a
是這里的問題。 find -name 1 -a -name 2
與find -name 1 -name 2
相同,並且永遠不會打印任何內容,因為名稱不能同時為1
和2
。 您可以改用-o
,但有一個更簡單的解決方案:
當i=50
時,使用find -name "${i}[fr].TXT"
查找文件50f.TXT
和50r.TXT
。
請注意戈登戴維森的評論:
find 搜索子目錄(和子子目錄和...),因此它可能會在當前目錄中找到文件,將它們向下移動到
logs/
,然后在logs/
中再次找到它們,將它們向下移動到logs/logs/
(或至少嘗試)等
為了防止這種情況,您可以通過添加-name logs -prune -o
作為第一個 arguments 來排除名為log
的目錄find
。
但是,如果您的所有文件都在當前工作目錄中,則根本不需要find
。
Glob 也可以這樣做:
shopt -s failglob
for i in "${array[@]}"; do
mv "${i}"[fr].TXT logs/
done
如果沒有找到匹配的文件,Failglob 將打印一條錯誤消息。 您可以將其省略,但生成的命令mv logs/
將打印一條錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.