題 將當前目錄中的所有文件移到一個目錄中


我在我的CentOS服務器上安裝了wordpress。

現在在我的/ var / ww / html文件夾中,我有一個wordpress文件夾。我想將'wordpress'文件夾中的所有文件移動到父目錄,即/ var / www / html。

現在我看過這篇文章 - 如何將所有文件從當前目錄移動到上層目錄?

我已經嘗試了那裡建議的命令,所有命令行都是:

[root@servername wordpress]# mv * .[^.]* ..
mv: cannot stat `*': No such file or directory

如何將所有文件移到一個目錄上?


2
2017-07-06 12:00


起源




答案:


如果你有bash 4+(請查看 bash --version),你可以簡單地使用dotglob shell選項來確保globs包含以。開頭的文件 . 默認情況下。

shopt -s dotglob ## activate dotglob
mv ./* ../
shopt -u dotglob ## deactivate dotglob

除了減少您需要為此任務提供的思考量之外,它還具有足夠聰明以至於不匹配的優勢 . 和 .. 沒有你不得不亂來。我更願意為我的整體做準備 ./ 防止任何以。開頭的文件名 - 從被視為選擇。

然而,您的錯誤向我表明您正在嘗試處理空目錄,或者至少一個只包含dotfiles的目錄。默認情況下,如果glob與任何文件名都不匹配,bash會將其字面上發送給命令 - 因為沒有名為的文件 * 在目錄中, mv 正在發送該錯誤。


5
2017-07-06 12:49



很酷......我把它整理好了謝謝。出於某種原因,它實際上移動了文件,在我得到的所有錯誤中。但是謝謝你的提示 - DextrousDave
你也可以找到 這一頁 對於將來參考有用(整個網站是使用bash的非常好的參考)。 - evilsoup


該消息表明沒有匹配'*'的文件。確保您正在移動的文件夾中存在文件或文件夾。如果只有文件或文件夾以。存在,您可以運行該命令 mv .[^.]* .. 將它們移動到一個目錄中。驗證是否通過運行移動了所有文件 ls -la 並驗證該列表僅包含此(。)和上述(..)目錄。


2
2017-07-06 12:32





正如其他人所說,你可能正在一個空目錄上運行你的命令。執行此操作的另一種方法(將在空目錄上靜默失敗)是使用 find-exec 行動:

find . -exec mv '{}' ../ \;

這會給你一個錯誤:

mv: cannot move `./' to `../.': Device or resource busy

這是因為我沒有限制 find 按文件類型,所以它也會嘗試移動當前目錄(.)並失敗。您可以安全地忽略此錯誤,或者您可以指定您想要所有類型的文件和文件夾:

find . \( -type f -o -type d \)   -exec echo '{}' ../ \;

man find

  -exec command ;
          Execute command; true if 0 status is returned.
          All following arguments to find are  taken  to
          be  arguments to the command until an argument
          consisting of `;' is encountered.  The  string
          `{}'  is  replaced  by  the  current file name
          being processed everywhere it  occurs  in  the
          arguments  to  the  command, not just in argu‐
          ments where it is alone, as in  some  versions
          of  find.   Both  of these constructions might
          need to be escaped (with a `\') or  quoted  to
          protect them from expansion by the shell. 

2
2017-07-06 13:45