題 如何mv點文件而不包括linux / mac上的父目錄? [重複]


可能重複:
我能保留嗎?和..出來。*擴張? 

我知道

mv * ~/whatever
mv .* ~/whatever

但那試圖移動 . 和 ..,這只是給我帶來了一堆痛苦。有沒有辦法mv所有文件,包括 .* 文件,但排除當前目錄,它的父級?


4
2017-08-30 13:52


起源




答案:


告訴bash有第二個字符,它不是一個點。不會移動名為的文件 ..file但是。

mv .[^.]* somewhere/

7
2017-08-30 14:00



這將適用於大多數情況,但會忽略以兩個點開頭的文件和目錄。例如 ..name 要么 ....name。 - Matteo
@Matteo:我已經在答案中提到了這個問題。 - choroba
@chroba抱歉:應該學會閱讀整個答案:-) - Matteo


從Bash手冊中, shopt 部分:

dotglob     If set, bash includes filenames beginning with a `.' in the results
            of pathname expansion.

shopt 可用於設置某些“shell選項”,如手冊中所述。看到 man bash

從而

shopt -s dotglob
mv * ~/whatever

做你想要的。用例如測試它

shopt -s dotglob
ls -d *

查看哪些文件匹配。

由於它是根據手冊的事實上的Bash方式,因此對於具有棘手名稱的文件,不會出現任何隱藏的意外。如果是這樣,那麼根據定義它是Bash中的一個錯誤。


7
2017-08-30 14:16





試試這個:

mv .[a-zA-Z0-9]* ~/whatever

除非您有以。開頭的點文件 ._ 或其他非字母數字字符,它應該全部。


0
2017-08-30 13:54





如果您不想移動目錄,則會將所有文件移動到 ./foo/

$ find . -type f  | while read n; do mv "$n" foo/; done

如果您確實也需要執行目錄,請嘗試:

$ find . | grep -vP '^\.$' | while read n; do mv "$n" foo/; done

0
2017-08-30 14:02





使用不包含的查找 . 和 ..

find . -name ".*" -mindepth 1 -maxdepth 1

並檢查結果。移動文件

find . -name ".*" -mindepth 1 -maxdepth 1 -exec mv {} ~/whatever \;

0
2017-08-30 14:17