Bash

用於在命令行中複製和粘貼文件的剪貼板?

  • May 14, 2019

在 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*herecutfiles glob*here。所發生的只是你的 shell 擴展了 glob 並將這些文件名放入一個數組中。然後您cd到目標目錄並執行,它為每個源文件pastefiles執行一個命令。cp如果您之前已經“剪切”了文件,那麼 pastefiles 也會刪除源文件(或嘗試刪除)。這不會對現有文件進行任何錯誤檢查(在可能用cp; 破壞它們之前),或者您有權在“剪切”期間刪除文件,或者您可以在搬出後重新訪問源目錄其中)。

引用自:https://unix.stackexchange.com/questions/268818