Em uma máquina Linux Centos 4, estou tentando criar uma linha de comando bash simples para percorrer uma estrutura de diretório abaixo de um diretório atual arbitrário e em cada subdiretório tocar em um arquivo, listar o conteúdo do diretório mas transportá-los para /dev/null
, e remova o arquivo tocado. O ponto obscuro deste script é fazer cócegas no sistema cliente / servidor NFS subjacente para garantir que o conteúdo de cada diretório reflita uma alteração feita em uma máquina diferente que, de outra forma, levaria algum tempo para ser propagada. Eu encontrei esta solução alternativa evita o atraso. Ignorando os méritos da minha razão para fazer isso, por que o meu roteiro proposto não funciona?
[CentosMachine] find . -type d -print0 | xargs -0 -I {} pushd {}; touch xYzZy.fixZ; ls &> /dev/null; rm -f xYzZy.fixZ; popd
xargs: pushd: No such file or directory
bash: popd: directory stack empty
O comando find
está retornando no momento:
.
./dir
./emptyDir
./dirOfDir
./dirOfDir/ofDir
./dirOfDir/ofDir/Dir(empty)
Primeiro, achei que talvez o (
e )
em um dos nomes de diretório fosse o problema, mas renomear esse diretório como ./dirOfDir/ofDir/Dir_empty_
não alterou o sintoma. Eu também tentei ver strace
output, mas não vi nada que ajudou, mas vi os diretórios sendo processados.
Aqui está um trecho do final da saída strace
com esse diretório renomeado para usar sublinhados em vez de parênteses:
[...]
chdir("ofDir") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("Dir_empty_", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
open("Dir_empty_", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 2 entries */, 32768) = 48
getdents64(4, /* 0 entries */, 32768) = 0
close(4) = 0
chdir("Dir_empty_") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fchdir(3) = 0
write(1, ".[CentosMachine] find . -type d -print0 | xargs -0 -I {} pushd {}; touch xYzZy.fixZ; ls &> /dev/null; rm -f xYzZy.fixZ; popd
xargs: pushd: No such file or directory
bash: popd: directory stack empty
./dir.
./dir
./emptyDir
./dirOfDir
./dirOfDir/ofDir
./dirOfDir/ofDir/Dir(empty)
./emptyDir[...]
chdir("ofDir") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat64("Dir_empty_", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
open("Dir_empty_", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fstat64(4, {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 2 entries */, 32768) = 48
getdents64(4, /* 0 entries */, 32768) = 0
close(4) = 0
chdir("Dir_empty_") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
chdir("..") = 0
lstat64(".", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
fchdir(3) = 0
write(1, ".%pre%./dir%pre%./emptyDir%pre%./dirOfDir%pre%./"..., 75) = 75
exit_group(0) = ?
./dirOfDir%pre%./"..., 75) = 75
exit_group(0) = ?