Quel est le problème avec l'expansion shell générique? (En supposant qu'il n'y a qu'un seul nom de fichier.)
% tar -cvf *mysearchstring*
% tar -xvf *mysearchstring*
Bien sûr, le nom du fichier qui correspond * mysearchstring * aura des espaces. Mais le shell [tcsh, bash] affectera ce nom de fichier, , y compris ses espaces, à un seul argument de tar.
Vous pouvez vérifier cela avec un simple programme C ou C++. .: par exemple
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
cout << "argc = " << argc << endl;
for (int i = 0; i < argc; i ++)
cout << "argv[" << i << "] = \"" << argv[i] << "\"" << endl;
return 0;
}
Essayez-: ./a.out * foo *
C'est pourquoi HCS a: q option [cité wordlist] ...
Par ex [Tcsh]
foreach FILE (*mysearchstring*)
tar -xvf $FILE:q
end
Ou tar "$ FICHIER" au lieu de tar $ FILE: q, si vous préférez.
Si vous devez vraiment utiliser ls ...
aide ls quoi que ce soit redirigée vers un nom de fichier sortira par ligne. En utilisant tr, nous pouvons traduire les nouvelles lignes à tout autre caractère, tel que null. xargs peut recevoir des chaînes terminées par zéro. Cela contourne le problème des espaces. L'utilisation de -n1 permettra de résoudre le problème des fichiers multiples.
E.g .: \ ls | grep mysearchstring | tr '\ 012' '\ 0' | xargs --null -n1 tar -xvf
Mais je ne crois le goudron accueille plusieurs tarfiles de stdin comme l'OP a ... il
Je ne pense pas que votre question demande au bonne question. Votre exemple "similaire à" n'ouvrira réellement aucun fichier du répertoire. –