Files
將文件列表移動到位置列表
我想同時將多個文件移動到特定的新位置。
說我有以下
wrong name | c.txt | a.txt | b.txt | Correct name| a.txt | b.txt | c.txt |
然後我想做一些類似的事情
mv ./{a.txt,b.txt,c.txt} ./{b.txt,c.txt,a.txt}
但我得到了錯誤
@Kusalananda 回答的補充:
您可以使用函式使其通用:
mv_files() { local args=("$@") local num_args=${#args[@]} if [ $(bc <<< "$num_args%2") -ne 0 ]; then echo "Number of arguments must be a multiple of 2." return 1 else num_files=$(bc <<< "$num_args/2") tmpdir=$(mktemp -d -p .) for (( i=0;i<num_files;i++ )); do local n=$(bc <<< "$i+$num_files") mv "${args[$i]}" "${tmpdir}/${args[$n]}" done mv ${tmpdir}/* . rmdir ${tmpdir} echo "Done." fi }
然後你像這樣執行它:
mv_files a.txt b.txt c.txt b.txt c.txt a.txt
或者像你做的那樣:
mv_files ./{a.txt,b.txt,c.txt} ./{b.txt,c.txt,a.txt}
或者
old=( a.txt b.txt c.txt ) new=( b.txt c.txt a.txt ) mv_files "${old[@]}" "${new[@]}"
請注意
mv ./{a.txt,b.txt,c.txt} ./{b.txt,c.txt,a.txt}
擴展到
mv ./a.txt ./b.txt ./c.txt ./b.txt ./c.txt ./a.txt
在呼叫該
mv
實用程序之前。由於有兩個以上的操作數,並且由於最後一個操作數不是目錄,因此您會收到錯誤消息。如果最後一個操作數是目錄的路徑名,這會將所有文件移動到該目錄中(您還會因為兩次指定某些文件而出錯)。相反,一次將一個文件移動到一個臨時目錄中,同時將它們重命名為正確的名稱。然後將它們移回。
mkdir t mv a.txt t/b.txt mv b.txt t/c.txt mv c.txt t/a.txt mv t/*.txt ./ rmdir t
沒有快捷方式,該
mv
實用程序一次只能重命名一個文件。