簡體   English   中英

如何在 find 命令中使用文件名中的變量?

[英]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 2find -name 1 -name 2相同,並且永遠不會打印任何內容,因為名稱不能同時為12 您可以改用-o ,但有一個更簡單的解決方案:

i=50時,使用find -name "${i}[fr].TXT"查找文件50f.TXT50r.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.

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