我有一個目錄users
,其中充滿了為每個用戶命名的資料夾。在這些文件夾中,有一個名為的文件userinfo.csv
,我想將其從文件夾中取出並放入users
.由於使用者資料夾中的每個檔案都稱為 userInfo,因此我想將其重新命名以包含該資料夾中的使用者名稱。我嘗試了以下方法,但它不起作用,因為其中的用戶名$dir
是完整目錄。我並不熱衷於將其重命名為用戶名,我只需要重命名它,這樣當它移入時users
我就不會只剩下一個文件和一堆錯誤。
我該如何改進這個?
# for every subdirectory, copy userinfo.csv to /users and rename to avoid confusion/errors
for dir in /path/to/users/*/; do
(
cd "$dir" && cp userinfo.csv _$("dir").csv && cp _$("dir").csv /path/to/users/
)
done
答案1
如果您不需要最終檔案名稱中的使用者名,則
for i in /path/to/users/*/userinfo.csv ; do
mv $i /path/to/users/userinfo-$RANDOM.csv
done
適合您的用例嗎?
如果沒有,也可以使用bash的參數替換:
for i in /path/to/users/*/userinfo.csv ; do
mv $i /path/to/users/${i//\/-}
done
這將替換變數中的所有/
內容(路徑+檔案名稱)。所以你最終會得到,例如:-
$i
/path/to/users/path-to-users-john-userinfo.csv
/path/to/users/path-to-users-jack-userinfo.csv
答案2
for i in $(ls -1 /path/to/users/); do
mv /path/to/users/$i/*/userinfo.csv /path/to/users/userinfo_$i.csv
done
userinfo.csv
假設位置是,這將會起作用/path/to/users/$user/userinfo.csv
。如果/path/to/users/
包含沒有文件userinfo.csv
或只有文件的資料夾,mv
則不會執行任何操作,因此可以忽略。
在這種情況下,將包含文件或資料夾$i
中每個項目的名稱。/path/to/users/