Bash
用於在命令行中複製和粘貼文件的剪貼板?
在 Bash 中,假設我訪問一個目錄,然後訪問另一個目錄。我想將文件從第一個目錄複製到第二個目錄,但不指定它們的長路徑名。是否可以?
我的臨時解決方案是
/tmp
用作儲存文件副本的臨時位置。cp myfile /tmp
當我在第一個目錄中時,然後cp /tmp/myfile .
當我在第二個目錄中時。但我可能會檢查文件是否會覆蓋/tmp
.是否有類似於用於複製和粘貼文件的剪貼板的東西?
使用 Bash,我只需訪問以下目錄:
$ cd /path/to/source/directory $ cd /path/to/destination/directory
然後,我將使用
~-
指向上一個目錄的快捷方式:$ cp -v ~-/file1.txt . $ cp -v ~-/file2.txt . $ cp -v ~-/file3.txt .
如果要以相反的順序訪問目錄,則:
$ cp -v fileA.txt ~- $ cp -v fileB.txt ~- $ cp -v fileC.txt ~-
如果我看到這種情況是一次性的,我可能會:
a=`pwd` cd /somewhere/else cp "$a/myfile" .
如果有我發現自己半定期地複製文件的目錄,我可能會在我的 .profile 中為它們定義一些助記符變數。
編輯添加:
睡在上面之後,我想知道我可以多接近其他 GUI / OS 行為,您可以選擇一些文件,“剪切”或“複製”它們,然後將它們“粘貼”到其他地方。我能想到的最好的選擇機制是你的大腦/偏好加上 shell 的 globbing 功能。我對命名不是很有創意,但這是基本思想(在 Bash 語法中):
function copyfiles { _copypastefiles=("$@") _copypastesrc="$PWD" _copypastemode=copy } function cutfiles { _copypastefiles=("$@") _copypastesrc="$PWD" _copypastemode=cut } function pastefiles { for f in "${_copypastefiles[@]}" do cp "${_copypastesrc}/$f" . if [[ ${_copypastemode} = "cut" ]] then rm "${_copypastesrc}/$f" fi done }
要使用它,請將程式碼放入 ~/.bash_profile,然後放入
cd
源目錄並執行copyfiles glob*here
或cutfiles glob*here
。所發生的只是你的 shell 擴展了 glob 並將這些文件名放入一個數組中。然後您cd
到目標目錄並執行,它為每個源文件pastefiles
執行一個命令。cp
如果您之前已經“剪切”了文件,那麼 pastefiles 也會刪除源文件(或嘗試刪除)。這不會對現有文件進行任何錯誤檢查(在可能用cp
; 破壞它們之前),或者您有權在“剪切”期間刪除文件,或者您可以在搬出後重新訪問源目錄其中)。