J'essaie de copier tous les fichiers du répertoire A dans le répertoire B. Tous les fichiers du répertoire A commencent par un point, par exemple:
A/.a
A/.b
A/.c
que j'ai trouvé si j'utilise cp A/* B
:, obtenez toujours une erreur:
cp: cannot stat 'A/*': no such file or directory
Il semble qu'il n'y a pas d' option pour cp
que ls
pour les entrées poignée ouvertes avec un point, quelqu'un a idée de comment résoudre ce problème?
-r
. Sans-r
, il sautera simplement les répertoires.-R
devrait très bien fonctionner aussi. Si vous pensez que c'est faux, veuillez expliquer pourquoi.Si bash, vous pouvez définir
dotglob
avant de copierOu un langage de programmation
Si vous ne souhaitez pas définir dotglob,
la source
A
sont masqués. Il veut juste copier ça.Ce que vous cherchez, c'est plutôt:
Cela correspondra à tous les fichiers dot, mais pas "." ou "..". La plupart des solutions ci-dessus sont correctes tant que vous ne travaillez pas récursivement. Mais dès que vous voulez faire quelque chose comme:
Sans omettre "..", vous copiez tout du répertoire parent vers le bas, y compris les fichiers non dot.
la source
.a
ou.x
. Le modèle de globbing le plus court que j'ai trouvé qui correspond à tous les fichiers de points sauf.
et..
est.[^.]*
.J'ai juste essayé ce qui suit et ça marche, trouvez ...
la source
A/.
et enA/..
tant que paramètres àcp
, ce qui pourrait être problématique dans le cas où OP doit également copier des répertoires (en utilisantcp -r
)Ce n'est pas
cp
la faute , c'est bash: bash se développe*
dans tous les.
fichiers non cachés (c'est-à-dire: ne commençant pas par ).Bash se développera
.*
(ainsiA/.*
, dans votre cas) avec tous les fichiers commençant par.
, mais malheureusement, il inclut également.
et..
(répertoires actuel et parent) que vous voudrez probablement ignorer. (Notez que d'autres shells, comme zsh, ne les incluraient pas, et IIRC bash aussi, après avoir défini certaines options).Une solution simple pourrait être de supprimer
.
et..
de supprimer les fichiers correspondants.*
, d'une manière (très) hacky comme celle-ci:ou celui-ci (probablement plus propre: il utilise
find
pour trouver les fichiers à copier):mais vous trouverez probablement des solutions plus propres.
la source
for loop
puis créer ungrep
processus supplémentaire juste pour faire un travail commecp A/.*
?cp
ignorera le "." et les répertoires "..".S'ils commencent tous par un point, utilisez simplement
A/.*
:J'espère que cela t'aides!
la source
Vous pouvez utiliser ce script
la source
copie:
liste:
liste des fichiers sans répertoires décroissants:
la source
Vous devez exclure. et .. de la liste des fichiers passés à cp!
C'est sûr:
la source
C'est un vieux fil de discussion ... mais j'ai toujours pu copier tous les fichiers. Y compris les fichiers / dossiers commençant par "."
L'exemple copiera tous les fichiers et dossiers:
cp -aup /root/.* / backup / root /
la source